我们在应用程序中要求每次执行时创建的日志文件都有不同的名称(基于功能+当前线程)。我已经看到已经在SO中发布的问题,并尝试使用相同的方法,但它无法正常工作。
所有日志语句都记录在“xyz.log”中(在log4j.properties中指定)。只有“org.apache.log4j.PatternLayout”被记录在abc.log中(在程序中指定)。任何解决这个问题的指针都会非常有用。
log4j.properties
log4j.rootLogger=DEBUG, MyLogger
log4j.appender.MyLogger=org.apache.log4j.FileAppender
log4j.appender.MyLogger.layout=org.apache.log4j.PatternLayout
log4j.appender.MyLogger = org.apache.log4j.DailyRollingFileAppender
log4j.additivity = false
log4j.appender.MyLogger.File=xyz.log
log4j.appender.MyLogger.MaxFileSize = 5MB
log4j.appender.MyLogger.MaxBackupIndex = 20
# Pattern to output the caller's file name and line number.
log4j.appender.MyLogger.layout.ConversionPattern=%d %5p [%t](%c:%L) - %m%n
Java代码
logger = Logger.getLogger(MyLoggerUtil.class);
Layout layout = new PatternLayout("org.apache.log4j.PatternLayout");
logger.removeAllAppenders();
FileAppender appender = null;
try {
appender = new FileAppender(layout, "abc.log", false);
} catch (IOException e) {
e.printStackTrace();
}
logger.addAppender(appender);
logger.setLevel((Level) Level.DEBUG);
logger.debug("This is a debug test");
答案 0 :(得分:1)
PatternLayout
的构造函数需要转换模式,就像lo4j.properties
中使用的转换模式一样。因此,将Layout
的创建更改为:
Layout layout = new PatternLayout("%d %5p [%t](%c:%L) - %m%n");
从log4j.properties