【问题标题】:how to make log4j to write to the console as well如何使 log4j 也写入控制台
【发布时间】:2011-03-23 22:00:31
【问题描述】:

有没有办法告诉 log4j 将其日志写入文件和控制台? 谢谢 有我的属性:

log4j.rootLogger=DEBUG,console,R
log4j.rootLogger=INFO, FILE

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.conversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p - %m%n

log4j.appender.FILE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE.File=log4j.log
log4j.appender.FILE.MaxFileSize=512KB
log4j.appender.FILE.MaxBackupIndex=3
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p - %m%n

【问题讨论】:

  • R 是什么意思?

标签: java apache logging log4j


【解决方案1】:

这正是我正在寻找基于命令行的工具的确切用例。想在控制台上显示 INFO,但想将更详细的信息记录到日志文件中。经过各种建议,最后通过使用'log4j.appender.FILE.Threshold'解决了这个问题 如下所示。:

log4j.rootLogger=DEBUG,CONSOLE,FILE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.FILE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE.File=output/log.log
log4j.appender.CONSOLE.Threshold=INFO
log4j.appender.FILE.Threshold=DEBUG

【讨论】:

    【解决方案2】:

    如下编写根记录器,用于在控制台和文件上进行记录

    log4j.rootLogger=错误,控制台,文件

    并编写各自的定义,例如 Target、Layout 和 ConversionPattern(MaxFileSize 用于文件等)。

    【讨论】:

      【解决方案3】:

      这适用于调试模式下的控制台

      log4j.appender.console=org.apache.log4j.ConsoleAppender
      log4j.appender.console.Threshold=DEBUG
      log4j.appender.console.Target=System.out
      log4j.appender.console.layout=org.apache.log4j.PatternLayout
      log4j.appender.console.layout.conversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p - %m%n
      

      【讨论】:

        【解决方案4】:

        您的根记录器定义有点混乱。 请参阅log4j documentation

        这是一个标准的 Java 属性文件,这意味着行被视为键=值对。您的第二行 log4j.rootLogger 覆盖了第一行,这解释了为什么您在 console 附加程序上看不到任何内容。

        您需要将两个rootLogger 定义合并为一个。看起来您正试图将 DEBUG 消息发送到控制台并将 INFO 消息发送到文件。根记录器只能具有 一个 级别,因此您需要更改配置以使附加程序具有适当的级别。

        虽然我还没有验证这是否正确,但我猜它看起来像这样:

        log4j.rootLogger=DEBUG,console,file
        log4j.appender.console=org.apache.log4j.ConsoleAppender
        log4j.appender.file=org.apache.log4j.RollingFileAppender
        

        请注意,您的大小写也有错误 - 您在一个地方有控制台小写字母,而在另一个地方有大写字母。

        【讨论】:

        • DEBUG 和 INFO 的区别是什么? - 正如您自己指出的那样,这就是 OP 想要的。
        【解决方案5】:

        您的 log4j 文件应该类似于下面的读取 cmets。

        # Define the types of logger and level of logging    
        log4j.rootLogger = DEBUG,console, FILE
        
        # Define the File appender    
        log4j.appender.FILE=org.apache.log4j.FileAppender    
        
        # Define Console Appender    
        log4j.appender.console=org.apache.log4j.ConsoleAppender    
        
        # Define the layout for console appender. If you do not 
        # define it, you will get an error    
        log4j.appender.console.layout=org.apache.log4j.PatternLayout
        
        # Set the name of the file    
        log4j.appender.FILE.File=log.out
        
        # Set the immediate flush to true (default)    
        log4j.appender.FILE.ImmediateFlush=true
        
        # Set the threshold to debug mode    
        log4j.appender.FILE.Threshold=debug
        
        # Set the append to false, overwrite    
        log4j.appender.FILE.Append=false
        
        # Define the layout for file appender    
        log4j.appender.FILE.layout=org.apache.log4j.PatternLayout    
        log4j.appender.FILE.layout.conversionPattern=%m%n
        

        【讨论】:

          猜你喜欢
          • 2017-08-27
          • 2017-06-10
          • 2013-09-09
          • 2014-09-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多