【问题标题】:How can I direct log4j output so that different log levels go to different appenders?如何引导 log4j 输出,以便不同的日志级别转到不同的附加程序?
【发布时间】:2014-09-18 00:02:07
【问题描述】:

是否可以将“调试”和“信息”输出写入控制台,而“信息”输出仅写入某个日志文件?例如,给定以下日志记录:

LOG.debug(fileContent);
LOG.info(fileLength);

对应的log4j.xml 是什么样的?

【问题讨论】:

    标签: log4j


    【解决方案1】:

    好的,我现在知道了:

    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
        <appender name="console" class="org.apache.log4j.ConsoleAppender">
            ...
        </appender>
    
        <appender name="otherAppender"
                  class="org.apache.log4j.FileAppender FileAppender">
           <param name="Threshold" value="INFO"/>
            ...
        </appender>
    
        <root>
            <priority     value="debug" />
            <appender-ref ref="console" />
            <appender-ref ref="otherAppender" />
        </root>
    </log4j:configuration>
    

    感谢您的帮助!

    【讨论】:

      【解决方案2】:

      这绝对是可能的。配置看起来像这样(不检查语法正确性):

      <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
          <appender name="console" class="org.apache.log4j.ConsoleAppender">
              ...
          </appender>
      
          <appender name="otherAppender"
                    class="org.apache.log4j.FileAppender FileAppender">
              ...
          </appender>
      
          <logger name="com.mycompany.mypackage.MyClass">
              <level        value="info"/>
              <appender-ref ref="otherAppender" />
          </logger>
      
          <root>
              <priority     value="debug" />
              <appender-ref ref="console" />
          </root>
      </log4j:configuration>
      

      所有调试和信息消息都发送到 console 附加程序。信息消息转到otherAppender

      【讨论】:

        【解决方案3】:

        转到this 页面查看一些示例。

        就像在程序中添加两个不同的 appender 一样简单,一个 appender 用于您想要执行的每种类型的日志记录。

        【讨论】:

          【解决方案4】:

          使用 Eddie 的配置,我只能获得 MyClass 的“信息”输出。但我想要的是 MyClass 的“信息”输出到一个文件,而 MyClass 的“调试”输出到控制台。

          【讨论】:

            【解决方案5】:

            按照 rwwilden 的建议做,但删除这部分:

            <logger name="com.mycompany.mypackage.MyClass">
                <level value="info"/>
                <appender-ref ref="otherAppender" />
            </logger>
            

            并在otherAppender下添加&lt;param name="Threshold" value="INFO"/&gt;

            【讨论】:

              猜你喜欢
              • 2012-09-19
              • 2012-06-24
              • 1970-01-01
              • 2018-08-09
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-08-24
              • 1970-01-01
              相关资源
              最近更新 更多