【问题标题】:How can I create 2 separate log files with one log4j config file?如何使用一个 log4j 配置文件创建 2 个单独的日志文件?
【发布时间】:2012-03-11 02:57:14
【问题描述】:

我不知道如何配置我的 log4j,以便我的 debugLog 和我的 reportsLog 彼此分开(不是附加的)。为什么在下面的配置中,reportsLog 总是空的?

log4j.rootLogger=TRACE, stdout, debugLog

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d [%24F:%t:%L] - %m%n

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

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

这是我的 Java 代码:

package test;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

public class HelloLogger {

    static final Logger debugLog = Logger.getLogger("debugLog");
    static final Logger resultLog = Logger.getLogger("reportsLog");

    public static void main(String[] args) {
        PropertyConfigurator.configure("log4j.properties");
        debugLog.debug("Hello debugLog message");   
        resultLog.debug("Hello reportsLog message");
    }   
}

【问题讨论】:

    标签: java logging log4j


    【解决方案1】:

    试试下面的配置:

    log4j.rootLogger=TRACE, stdout
    
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d [%24F:%t:%L] - %m%n
    
    log4j.appender.debugLog=org.apache.log4j.FileAppender
    log4j.appender.debugLog.File=logs/debug.log
    log4j.appender.debugLog.layout=org.apache.log4j.PatternLayout
    log4j.appender.debugLog.layout.ConversionPattern=%d [%24F:%t:%L] - %m%n
    
    log4j.appender.reportsLog=org.apache.log4j.FileAppender
    log4j.appender.reportsLog.File=logs/reports.log
    log4j.appender.reportsLog.layout=org.apache.log4j.PatternLayout
    log4j.appender.reportsLog.layout.ConversionPattern=%d [%24F:%t:%L] - %m%n
    
    log4j.category.debugLogger=TRACE, debugLog
    log4j.additivity.debugLogger=false
    
    log4j.category.reportsLogger=DEBUG, reportsLog
    log4j.additivity.reportsLogger=false
    

    然后在 Java 代码中相应地配置记录器:

    static final Logger debugLog = Logger.getLogger("debugLogger");
    static final Logger resultLog = Logger.getLogger("reportsLogger");
    

    你想输出到stdout吗?如果不是,把log4j.properties的第一行改成:

    log4j.rootLogger=OFF
    

    并去掉 stdout 行。

    【讨论】:

    • 谢谢!我在互联网上搜索了几个小时,找不到这样的例子。谢谢!我试过了,效果很好。
    • 我已经尝试了上面的配置,我想登录到标准输出。但是,我无法登录标准输出??除了这两行 static final Logger debugLog = Logger.getLogger("debugLogger"); static final Logger resultLog = Logger.getLogger("reportsLogger");我还需要添加什么吗???
    【解决方案2】:

    相应地修改您的log4j.properties 文件:

    log4j.rootLogger=TRACE,stdout
    ...
    log4j.logger.debugLog=TRACE,debugLog
    log4j.logger.reportsLog=DEBUG,reportsLog
    

    根据您的需要更改每个记录器的日志级别。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多