希望log的紀錄依照日期的不同,每一個日期獨立一個檔案,類似
serverlog-2013-08-11.log、serverlog-2013-08-12.log ... etc
- 寫一個專門處理的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設定檔使用 - 撰寫log4j設定檔infoerror.properties
- 重新啟動程式,log檔案就會在相對應的位置囉
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
沒有留言:
張貼留言