【问题标题】:Adding multiple log files添加多个日志文件
【发布时间】:2018-03-06 13:32:46
【问题描述】:

我想使用默认记录器以及仅记录我定义的记录器的特定记录器。我通过引用另一个SO question得到以下信息。

例如:

  1. log.log - 包括所有日志
  2. foo.log - 包括由定义的日志 foo.info(..)

我设置了以下属性

log4j.rootLogger = INFO, FOO, file

log4j.logger.FOO=DEBUG, FOO 
log4j.logger.file=DEBUG, file 

log4j.additivity.FOO=false 
log4j.additivity.file=false 

log4j.appender.FOO = org.apache.log4j.RollingFileAppender 
log4j.appender.FOO.layout = org.apache.log4j.PatternLayout
log4j.appender.FOO.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
log4j.appender.FOO.File = foo.log

log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=log.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

我的代码包括以下内容:

private static final Logger foo = Logger.getLogger("FOO");

private static final Logger log = Logger.getLogger(App.class); //NOTE I can't change this

public static void main(String[] args) { 
    log.info("info");
    foo.info("fooo");
}

但这与我想要的相反

log.log 只有“信息”,而foo.log 两者都有。

请注意,我无法更改默认的 log 实例化代码段。

【问题讨论】:

    标签: java log4j


    【解决方案1】:

    如下更改您的属性文件。 fileAppender 将被添加到 FOO 记录器和根记录器以记录所有消息。 FOOAppender 只会添加到 FOO 记录器以仅记录它的消息。为 loggers 和 appender 赋予不同的名称,有助于理解日志属性文件。

    log4j.rootLogger = INFO,fileAppender
    log4j.logger.FOO=DEBUG,FOOAppender,fileAppender
    log4j.additivity.FOO=false 
    
    log4j.appender.FOOAppender = org.apache.log4j.RollingFileAppender 
    log4j.appender.FOOAppender.layout = org.apache.log4j.PatternLayout
    log4j.appender.FOOAppender.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
    log4j.appender.FOOAppender.File = foo.log
    
    log4j.appender.fileAppender=org.apache.log4j.FileAppender
    log4j.appender.fileAppender.File=log.log
    log4j.appender.fileAppender.layout=org.apache.log4j.PatternLayout
    log4j.appender.fileAppender.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
    

    【讨论】:

    • 以上工作,谢谢。日志没有类名(因为记录器以getLogger("Foo") 启动)。如果我要将类名添加到日志中,是否需要在日志记录时显式传递它,还是有办法将其添加到属性文件中?
    • @SachiDangalla 可能您已经知道, %c 参数将采用您传递给 getLogger 方法的名称。如果您必须传递“Foo”文本并且仍想在日志上打印当前类名,那么我知道的唯一方法就像您所说的那样传递它。
    猜你喜欢
    • 1970-01-01
    • 2015-04-02
    • 1970-01-01
    • 1970-01-01
    • 2012-04-20
    • 2016-12-30
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    相关资源
    最近更新 更多