【问题标题】:Please initialize the log4j system properly warning请正确初始化log4j系统警告
【发布时间】:2020-07-19 04:59:04
【问题描述】:

这是错误信息 -

log4j:WARN No appenders could be found for logger (SerialPortUtil).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

这是SerialPortUtil 类中的调用-

private static final Logger log = Logger.getLogger(SerialPortUtil.class.getSimpleName());
.
.
.
log.info("Serial port " + port.getName() + " is available");

这是我的 log4j.properties 文件的内容 -

log4j.rootLogger=DebugAppender

#Debug logging
log4j.appender.DebugAppender=org.apache.log4j.RollingFileAppender
log4j.appender.DebugAppender.Threshold=DEBUG
log4j.appender.DebugAppender.File=activityLog.log
log4j.appender.DebugAppender.MaxFileSize=200KB
log4j.appender.DebugAppender.MaxBackupIndex=5
log4j.appender.DebugAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.DebugAppender.layout.ConversionPattern=%d{DATE} %t - %m%n

并且属性文件在类路径中。

在我看来一切都是正确的,所以发生了什么事? DEBUG 阈值不应该也捕获INFO 日志记录吗?

【问题讨论】:

标签: java log4j


【解决方案1】:

添加代码

BasicConfigurator.configure();

在您的静态主类中,如下所示..

注意: 添加“\hadoop-2.7.1\share\hadoop\common\lib\commons-logging-1.1.3.jar & \hadoop-2.7.1\share\hadoop\common\lib\log4j-1.2.17.jar " 作为外部参考

import org.apache.log4j.BasicConfigurator;

public class ViewCountDriver extends Configured implements Tool{

    public static void main(String[]args) throws Exception{

        BasicConfigurator.configure(); 

        int exitcode = ToolRunner.run(new ViewCountDriver(), args);
        System.exit(exitcode); 
    }
}

【讨论】:

  • 如果你使用那个配置,它不会使用 log4j 文件。它使用预定义的格式添加一个使用 PatternLayout 的 ConsoleAppender,使用 PatternLayout.TTCC_CONVERSION_PATTERN 并打印到 System.out 到根类别。
【解决方案2】:

好的,所以我通过更改它来工作

log4j.rootLogger=DebugAppender

到这里

log4j.rootLogger=DEBUG, DebugAppender

显然您必须先将日志记录级别指定为rootLogger?如果我浪费了任何人的时间,我深表歉意。

另外,我决定回答我自己的问题,因为这不是类路径问题。

【讨论】:

    【解决方案3】:

    来自错误消息中的链接:

    当无法找到默认配置文件 log4j.properties 和 log4j.xml 并且应用程序未执行显式配置时,会发生这种情况。 log4j 使用 Thread.getContextClassLoader().getResource() 来定位默认配置文件,不直接检查文件系统。了解放置 log4j.properties 或 log4j.xml 的适当位置需要了解正在使用的类加载器的搜索策略。 log4j 不提供默认配置,因为在某些环境中可能禁止向控制台或文件系统输出。另请参阅常见问题解答:为什么 log4j 无法在 J2EE 或 WAR 应用程序中找到我的属性?。

    找不到配置文件。你是用xml还是属性文件??

    另外,使用logback!

    【讨论】:

    • 没错。请注意,xml 配置还提供了有时可能有用的过滤器。很高兴你让它工作。
    【解决方案4】:

    如果您在运行使用 log4j 的程序时遇到错误/警告,解决方案是添加类加载器可以看到的 log4j.properties。通常它位于 Java 项目的“src”文件夹中: 将以下内容添加到文件中

    log4j.rootLogger=INFO, stdout
    
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target=System.out
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
    

    【讨论】:

      【解决方案5】:

      我的解决方法是将“log4j.properties”放入“src”文件夹。它在我的包文件夹中不起作用,它必须是源代码根目录中的一个。将其添加到构建路径然后将其移动到“参考库”也不起作用。

      重复一遍:将 log4j.properties 放在 src 文件夹的根目录下。

      我的 log4j.properties 文件包含以下内容,适用于基于 Eclipse 的最新版 Spring Tool Suite。

      # Configure logging for testing: optionally with log file
      #log4j.rootLogger=INFO, stdout
      log4j.rootLogger=WARN, stdout, logfile
      
      log4j.appender.stdout=org.apache.log4j.ConsoleAppender
      log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
      log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
      
      log4j.appender.logfile=org.apache.log4j.FileAppender
      log4j.appender.logfile.File=target/spring.log
      log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
      log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%
      

      【讨论】:

        【解决方案6】:

        这对我有用:

        public static void main(String[] args) {
        
                Properties props = new Properties();
                props.load(new FileInputStream("src/log4j.properties"));
                PropertyConfigurator.configure(props);
        

        【讨论】:

        • 这是救命稻草!
        【解决方案7】:

        没有一个回答的方法可以解决在 NetBeans 中为非 maven jsf web 项目找不到log4j.properties 文件的问题。所以答案是:

        1. 在项目根文件夹(最外层文件夹)中创建一个名为resources 的文件夹。
        2. 在左侧菜单的项目资源管理器中右键单击项目,选择属性。
        3. 在类别中打开源代码,将该文件夹添加到源包文件夹中。
        4. 在类别中打开运行并将其添加到 VM 选项:Dlog4j.configuration=resources/log4j.properties
        5. 点击确定,随心所欲地构建和部署项目,就这样。

        我在 log4j 文件中写了特殊模式来检查 log4j 是否用于我的文件:

        # Root Logger Option
        log4j.rootLogger=INFO, console
        
        # Redirect Log Messages To Console
        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=%-5p | %d{yyyy-MM-dd HH:mm:ss} | [%t] %C{2} xxxx (%F:%L) - %m%n
        

        我检查了它,因为如果您在 log4j 的代码中使用 BasicConfigurator.configure();,则使用预定义的模式。

        【讨论】:

          【解决方案8】:

          尝试在 main 中执行以下操作:

          public static void main(String[] args) {
               PropertyConfigurator.configure(args[0]);
              //... your code
          

          你需要告诉 log4j 它的配置应该是什么。

          【讨论】:

            【解决方案9】:

            对我有用的是创建一个 log4j 属性文件(您可以在网上找到许多示例)并将其放在项目目录的属性文件夹中(如果不存在,请创建此文件夹)。右键单击文件夹和Build Path->Use as Source Folder。

            希望对你有帮助!

            【讨论】:

              【解决方案10】:

              要添加到@Gevorg,如果你有类似的情况在本地运行Spark,请将log4j.properties文件放在主文件夹下名为resources的文件夹中。

              【讨论】:

                【解决方案11】:

                只需在 main 方法的开头配置您的 log4j 属性文件路径:例如:PropertyConfigurator.configure("D:\files\log4j.properties");

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2015-04-13
                  • 1970-01-01
                  • 2018-06-28
                  • 2011-09-30
                  • 1970-01-01
                  • 2018-05-18
                  • 1970-01-01
                  • 2011-12-02
                  相关资源
                  最近更新 更多