【问题标题】:Minor loggers aren't logging with predefined RootLogger log level (log4j)次要记录器未使用预定义的 RootLogger 日志级别 (log4j) 进行记录
【发布时间】:2017-08-10 14:35:29
【问题描述】:

在运行具有多个依赖项 (JAR) 的多类 Java 应用程序时,我遇到的问题是,即使 RootLoggers 级别设置为“ALL”,次要记录器也没有登录调试级别。

我想用下面的 mwe 来说明这个问题,它可以作为意图。请注意,原始应用程序(更全面)不会登录调试级别,即使它应该从其根记录器继承日志级别(ALL)。次要记录器未在与根目录相同的级别进行记录的原因可能是什么?

log4j.xml:

 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

 <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"
 debug = "true"
 threshold = "all">

    <appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
       <layout class="org.apache.log4j.PatternLayout">
          <param name="ConversionPattern" value="%d{dd MMM yyyy HH:mm:ss} %5p %c{1} - %m%n"/>
       </layout>
    </appender>

    <appender name="fileAppender" class="org.apache.log4j.RollingFileAppender">
       <param name="append" value="true"/>
       <param name="file" value="out/Marktdaten_Uploader_Tool.log"/>
       <layout class="org.apache.log4j.PatternLayout">
          <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
       </layout>
    </appender>

    <root>
       <level value="all"/>
       <appender-ref ref="consoleAppender"/>
       <appender-ref ref="fileAppender" />
    </root>
 </log4j:configuration>

Class1(包含带有根记录器实例化的主方法):

 package log4j_Test;

 import org.apache.log4j.*;

 public class LoggerStart {

    private static Logger logger = Logger.getRootLogger();

    public static void main(String[] args) {

    logger.debug("message");

    new Class2();

    }
 }

Class2(包含次要记录器和登录调试级别的命令):

 package log4j_Test;
 import org.apache.log4j.Logger;

 public class Class2
 {
   private static Logger logger = Logger.getLogger(Class2.class);

   Class2()
   {
     logger.debug("My debug message from Class2");
   }
 }

【问题讨论】:

  • Class1Class2 完全一样......
  • 谢谢,改正
  • 真的没有人给我一些建议吗?我已经在这个问题上投入了大量时间 - 没有成功。
  • 我不知道... 是不是有可能,Class2Logger 在配置被处理之前被实例化?这应该记录到控制台...
  • 在 Class2 实例化之前,在运行开始时直接处理配置。

标签: java logging log4j


【解决方案1】:

我完全删除了 log4j.xml 并直接在应用程序的 main 方法中添加了记录器配置,从而解决了这个问题。

【讨论】:

    猜你喜欢
    • 2011-01-28
    • 1970-01-01
    • 2014-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多