具有不同配置Log4j的不同记录器

时间:2017-11-01 13:45:22

标签: java logging log4j

import org.apache.log4j.*;

public class LoggingInJava {

    public static void main(String[] args) {
        PropertyConfigurator.configure("mylog4j1.properties");
        myLogger.info("1");
        PropertyConfigurator.configure("mylog4j2.properties");
        myLogger2.info("2");

        myLogger.info("3");
    }
}

我是初学者。

我有两个不同的属性文件 - mylog4j1.properties有fileappender输出到file1,mylog4j2.properties有fileAppender输出到file2。

我希望myLogger1能够与mylog4j1配置一起使用,并且类似于下一步。

但如果我按上述方式编写代码,我的预期结果并不理想。

预期结果:

  

file1:1 3
  file2:2

实际结果:

  

file1:1   file2:2 3

我确实尝试过来从stackoverflow中学习其他问题,但即便如此,我也无法弄明白。

请帮我找出我的错误,或者我是否在Log4j框架中犯了概念错误。

2 个答案:

答案 0 :(得分:0)

以下代码工作正常,它从两个不同的属性文件“mylog4j1.properties”和“mylog4j2.properties”中获取log4j,并将输出生成为两个输出文件“file1.log”和“file2.log”具有所需的输出。

    import org.apache.log4j.*;

    public class LoggingInJava {

        static final Logger myLogger1 = Logger.getLogger("mylog4j1");
        static final Logger myLogger2 = Logger.getLogger("mylog4j2");

        public static void main(String[] args) {
            PropertyConfigurator.configure("mylog4j1.properties");
            myLogger1.info("1");
            PropertyConfigurator.configure("mylog4j2.properties");
            myLogger2.info("2");

            myLogger1.info("3");
        }
    }

mylog4j1.properties
--------------------
log4j.rootLogger=OFF

log4j.appender.myLogger1=org.apache.log4j.FileAppender
log4j.appender.myLogger1.File=logs/file1.log
log4j.appender.myLogger1.layout=org.apache.log4j.PatternLayout
log4j.appender.myLogger1.layout.ConversionPattern=%d [%24F:%t:%L] - %m%n

log4j.category.mylog4j1=TRACE, myLogger1
log4j.additivity.mylog4j1=false


mylog4j2.properties
--------------------
log4j.rootLogger=OFF

log4j.appender.myLogger2=org.apache.log4j.FileAppender
log4j.appender.myLogger2.File=logs/file2.log
log4j.appender.myLogger2.layout=org.apache.log4j.PatternLayout
log4j.appender.myLogger2.layout.ConversionPattern=%d [%24F:%t:%L] - %m%n

log4j.category.mylog4j2=TRACE, myLogger2
log4j.additivity.mylog4j2=false

答案 1 :(得分:0)

为什么要使用两个properties个文件?您可以从1个属性文件中执行此操作。

以下是如何实现

的示例
# Direct log messages to a log file
log4j.appender.FILE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE.File=/home/logs/firstLog.log
log4j.appender.FILE.MaxFileSize=1MB
log4j.appender.FILE.MaxBackupIndex=1
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.Append=true
log4j.appender.FILE.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c{1}] %m%n

log4j.appender.SECOND=org.apache.log4j.RollingFileAppender
log4j.appender.SECOND.File=/home/logs/secondLog.log
log4j.appender.SECOND.MaxFileSize=1MB
log4j.appender.SECOND.MaxBackupIndex=1
log4j.appender.SECOND.layout=org.apache.log4j.PatternLayout
log4j.appender.SECOND.Append=true
log4j.appender.SECOND.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c{1}] %m%n

# Root logger option
log4j.rootLogger=TRACE, FILE

log4j.category.testngLogger=DEBUG, SECOND
log4j.additivity.testngLogger=false