2012-08-13 75 views
1

我運行tomcat下一個web應用程序,我已經(通過contextInitialized鉤子)這樣配置的記錄:如何更改其日誌使用的java.util.logging存儲目錄*

Logger rootLogger = Logger.getLogger(""); 
    String date = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); 
    FileHandler logHandler = new FileHandler(
     "myapp_" + date + "_%u.log", 
     524288000, // 500 MB max size 
     1, // one log file at a time 
     true // if it exists: append, don't overwrite 
    ); 
    Level defaultLevel = Level.INFO; 
    logHandler.setFormatter(new XMLFormatter()); 
    logHandler.setLevel(defaultLevel); 
    for (Handler h : rootLogger.getHandlers()) { 
     rootLogger.removeHandler(h); 
    } 
    rootLogger.setLevel(defaultLevel); 
    rootLogger.addHandler(logHandler); 

不幸的是,日誌不會在/ var/log下創建。它們在/ var/lib/tomcat6/like /var/lib/tomcat6/myapp_2012-08-13_0.log中創建。我想將其更改爲/ var/log/myapp/like:/var/log/myapp/myapp_2012-08-13_0.log我沒有看到我可以在FileLogger上設置的任何設置來實現此目的。我錯過了一些明顯的東西,還是有辦法實現它?

回答

1

您可以使用JVM屬性預先指定文件名。在下面的示例傳中類似-Dlog_directory = C:\日誌

package sample; 

import java.io.IOException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.logging.FileHandler; 
import java.util.logging.Handler; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import java.util.logging.XMLFormatter; 

import org.apache.commons.lang.StringUtils; 

public class stackoverflow11937181 { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     Logger rootLogger = Logger.getLogger(""); 
     String date = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); 
     String logDirectory = System.getProperty("log_directory"); 
     String logFile = (logDirectory == null ? StringUtils.EMPTY : logDirectory) + "/myapp_" + date + "_%u.log"; 
     try { 
      FileHandler logHandler = new FileHandler(logFile, 524288000, // 500 MB max size 
        1, // one log file at a time 
        true // if it exists: append, don't overwrite 
      ); 
      Level defaultLevel = Level.INFO; 
      logHandler.setFormatter(new XMLFormatter()); 
      logHandler.setLevel(java.util.logging.Level.FINE); 
      for (Handler h : rootLogger.getHandlers()) { 
       rootLogger.removeHandler(h); 
      } 
      rootLogger.setLevel(defaultLevel); 
      rootLogger.addHandler(logHandler); 

     } 
     catch (SecurityException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     rootLogger.log(Level.FINE, "sample"); 

    } 

} 
+0

啊,那是顯而易見的:以絕對路徑的絕對文件名。我應該想到這一點。似乎工作,thx。 – 2012-08-13 16:44:53

相關問題