2013年8月13日 星期二

log4j - 如何設定log檔案依照日期來區分檔案名稱

需求:
希望log的紀錄依照日期的不同,每一個日期獨立一個檔案,類似
serverlog-2013-08-11.log、serverlog-2013-08-12.log ... etc


  1. 寫一個專門處理的Logger class(可隨意,但我習慣這樣使用)
    package utilities;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import org.apache.log4j.Logger;
    import org.apache.log4j.PropertyConfigurator;
    
    public class Logger4j {
    
     static{
      initLoggerDateParam();
     }
    
     private static void initLoggerDateParam(){
         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
         System.setProperty("log4j.date", dateFormat.format(new Date()));
     }
     private static Logger initLogger(){
      PropertyConfigurator.configure("infoerror.properties");
      Logger logger = Logger.getLogger(Logger4j.class);
      
      initLoggerDateParam();
      return logger;
     }
     
     public static void logInfo(String msg){
      initLogger().info(msg);
     }
     
     public static void logError(Exception ex){
      initLogger().debug(ex.getMessage(), ex.getCause());
     }
    }
      

    重點為其中的initLoggerDateParam()部分,在這裡我們設定一個系統變數log4j.date,為了提供給log4j設定檔使用
  2. 撰寫log4j設定檔infoerror.properties

  3. log4j.rootLogger=Info, A1, A2
    
    
    # A1 is set to be a ConsoleAppender
    log4j.appender.A1=org.apache.log4j.ConsoleAppender
    log4j.appender.A1.layout=org.apache.log4j.PatternLayout
    log4j.appender.A1.layout.ConversionPattern=[%d{yy/MM/dd HH:mm:ss}][%p][%C-%L] %m%n
    
    # A2 is set to be a file
    log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.A2.layout=org.apache.log4j.PatternLayout
    log4j.appender.A2.layout.ConversionPattern=[%d{yy/MM/dd HH:mm:ss}][%p][%C-%L] %m%n
    log4j.appender.A2.File=./log/gpserver-${log4j.date}.log
    
    

    重點為log4j.appender.A2.File=./log/appname-${log4j.date}.log 我們使用${log4j.date}提取出java中設定的系統變數log4j.date
  4. 重新啟動程式,log檔案就會在相對應的位置囉

沒有留言:

張貼留言