【问题标题】:how to write different information to two different files using same logger of log4j?如何使用相同的 log4j 记录器将不同的信息写入两个不同的文件?
【发布时间】:2011-01-16 20:29:34
【问题描述】:

我想使用我的记录器写入两个不同的文件,声明如下:

public static final Logger logger = Logger.getLogger(Adapt.class);
PropertyConfigurator.configure("log4j.properties");

log4j 包含的文件:

log4j.rootLogger=DEBUG, FA

#File Appender
log4j.appender.FA=org.apache.log4j.FileAppender
log4j.appender.FA.File=temp.ppr
log4j.appender.FA.layout=org.apache.log4j.PatternLayout
log4j.appender.FA.append=false
log4j.appender.FA.layout.ConversionPattern= %m%n

是否有可能使用记录器轻松地将不同的文本写入两个不同的文件?

如果没有,有没有办法用两个记录器做到这一点? (我试过了,但由于函数 configure 是静态的,所以遇到了问题。)

谢谢。

【问题讨论】:

    标签: java logging file log4j


    【解决方案1】:

    只需定义第二个记录器变量:

    Logger otherLogger = Logger.getLogger("OTHER_LOGGER");
    

    为其定义一个配置(注意 log4j.logger.OTHER_LOGGER 语法参见 log4j.rootLogger,正如 user623395venkatesh Dodla 所指出的那样):

    log4j.logger.OTHER_LOGGER=DEBUG, OtherAppender
    
    log4j.additivity.OTHER_LOGGER = false
    
    #File Appender
    log4j.appender.OtherAppender=org.apache.log4j.FileAppender
    log4j.appender.OtherAppender.File=temp2.ppr
    log4j.appender.OtherAppender.layout=org.apache.log4j.PatternLayout
    log4j.appender.OtherAppender.append=false
    log4j.appender.OtherAppender.layout.ConversionPattern= %m%n
    

    并像往常一样记录您的不同文本:

    logger.debug("My normal log");
    otherLogger.info("My special text");
    

    【讨论】:

    • 配置是我的问题,我如何将它连接到这个特定的记录器? PropertyConfigurator.configure 只获取属性文件的路径,而不是记录器对象
    • 把它们都放在同一个文件里。 log4j.rootLogger 和 log4j.OTHER_LOGGER 行。
    • 那不行,我试着做 logger.info("1");其他Logger.info("2");我得到的是没有创建 temp2.​​ppr 文件,而 temp.ppr 有文本 12... 怎么办?
    • 您是否正确配置了附加程序?两个记录器是否指向不同的附加程序?
    • 我刚刚将您的行添加到文件中,以及 otherLogger 的声明,就像您编写的一样。我的代码和我在问题上写的一样。
    【解决方案2】:

    它对我有用。 我的日志文件:

    # log4j.properties
    log4j.rootLogger=DEBUG,hfis,stdout
    #For second log
    log4j.logger.OTHER_LOGGER=DEBUG, OtherAppender
    log4j.additivity.OTHER_LOGGER = false 
    
    #File Appender 
    log4j.appender.OtherAppender=org.apache.log4j.FileAppender 
    log4j.appender.OtherAppender.File=C:\\Legacy.log
    log4j.appender.OtherAppender.ImmediateFlush=true 
    log4j.appender.OtherAppender.layout=org.apache.log4j.PatternLayout 
    log4j.appender.OtherAppender.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss.SSS} [%t] %-5p %c - %m%n 
    
    log4j.rootCategory=ERROR
    log4j.rootLogger.additivity=false
    
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    
    log4j.appender.hfis=org.apache.log4j.RollingFileAppender
    log4j.appender.hfis.Threshold=DEBUG
    log4j.appender.hfis.file=C:\\hfis.log 
    log4j.appender.hfis.ImmediateFlush=true
    log4j.appender.hfis.MaxFileSize=5MB
    log4j.appender.hfis.layout=org.apache.log4j.PatternLayout
    log4j.appender.hfis.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss.SSS} [%t] %-5p %c - %m%n
    # R is the RollingFileAppender that outputs to a rolling log
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Threshold=DEBUG
    
    # Define a pattern layout for the file.
    log4j.appender.mystdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.mystdout.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss.SSS} %-5p: %m%n<br>
    

    我的日志变量是

    final static Logger log = Logger.getLogger("hfis");
    final static Logger log2 = Logger.getLogger("OTHER_LOGGER");
    

    【讨论】:

      【解决方案3】:

      要创建 temp2.​​ppr,请从

      log4j.OTHER_LOGGER=DEBUG, OtherAppender
      

      log4j.**logger**.OTHER_LOGGER=DEBUG, OtherAppender
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-27
        • 1970-01-01
        • 1970-01-01
        • 2019-06-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多