我有以下log4j.properties文件:
cached_network_image
运行MyApp时,我将获取MyApp.log文件。我想知道是否可以在代码中为两个主类设置两个文件?像这样:
log.path=/var/log/MyApp
log4j.rootLogger=INFO, file
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File = MyApp.log
log4j.appender.file.Append = true
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=1000
log4j.appender.file.DatePattern = '.'yyy-MM-dd
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern =%d{yyyy-MM-dd HH:mm:ss} %t/%c{1} [%p] %m%n
然后,当我运行Myapp1时,它将创建Myapp1.log;当我运行Myapp2时,它将创建Myapp2.log
答案 0 :(得分:2)
可以在 log4j.properties 文件中对文件名进行参数化,并作为JVM参数传递
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File = ${ApplicationName}.log
可以将 ApplicationName 作为具有实际文件名的JVM参数传递
-DApplicationName=Myapp1
相同的 log4j.properties 文件可以由两个应用程序共享,并且您可以在每个应用程序的JVM参数中传递应用程序名称。
答案 1 :(得分:1)
您可以像这样为单个类配置日志文件-
log4j.logger.com.logger.test.logger_test.MyApp1=DEBUG, appender1
log4j.additivity.com.logger.test.logger_test.MyApp1=false
log4j.appender.appender1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.appender1.File=logs/MyApp1.log
log4j.appender.appender1.layout=org.apache.log4j.PatternLayout
log4j.logger.com.logger.test.logger_test.MyApp2=DEBUG, appender2
log4j.additivity.com.logger.test.logger_test.MyApp2=false
log4j.appender.appender2=org.apache.log4j.DailyRollingFileAppender
log4j.appender.appender2.File=logs/MyApp2.log
log4j.appender.appender2.layout=org.apache.log4j.PatternLayout
示例:
public class Myapp1 {
Logger logger = Logger.getLogger(Myapp1.class);
public Myapp1() {
logger.debug("In Myapp1");
}
}
public class Myapp2 {
Logger logger = Logger.getLogger(Myapp2.class);
public Myapp2() {
logger.debug("In Myapp2");
}
}
public class App {
public static void main( String[] args ){
Myapp1 myapp1 = new Myapp1();
Myapp2 myapp2 = new Myapp2();
}
}