【问题标题】:Log4j Warning while initializing? [duplicate]初始化时出现Log4j警告? [复制]
【发布时间】:2011-12-02 21:15:09
【问题描述】:

我正在尝试学习 log4j,所以我只是尝试做一些非常简单的事情;

Logger logger = Logger.getLogger("ClientApplicationLog");
logger.info("Logger Test");

但是做了这个之后我得到了;

log4j:WARN No appenders could be found for logger (ClientApplicationLog).
log4j:WARN Please initialize the log4j system properly.

你知道我哪里错了吗?

谢谢大家

【问题讨论】:

标签: java log4j warnings


【解决方案1】:

您需要为您的记录器(例如日志文件)定义一个附加程序,例如在类路径上的 log4j.properties 文件中。

This tutorial 应该包含您需要知道的所有内容。

【讨论】:

    【解决方案2】:

    您需要在类路径中的某处有一个 log4j.xml,其中包含告诉它在哪里记录、如何记录等信息。或者,您可以在代码中以编程方式设置所有这些,但是在您的代码中具有灵活性会更好实施。

    我的 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="false">
    <!-- ============================== -->
       <!-- Append messages to the console -->
       <!-- ============================== -->
    
       <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
          <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
          <param name="Target" value="System.out"/>
          <param name="Threshold" value="DEBUG"/>
    
          <layout class="org.apache.log4j.PatternLayout">
             <!-- The default pattern: Date Priority [Category] Message\n -->
             <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
          </layout>
       </appender>
    
    <!-- ======================= -->
       <!-- Setup the Root category -->
       <!-- ======================= -->
    
       <root>
          <!-- 
             Set the root logger priority via a system property. Note this is parsed by log4j         
           -->
          <appender-ref ref="CONSOLE"/>
       </root>
    
    </log4j:configuration>
    

    【讨论】:

      【解决方案3】:

      您的类路径中缺少log4j.propertieslog4j.xml

      你可以使用

      绕过这个
      BasicConfigurator.configure();
      

      但请注意,这只会登录到 System.out,不建议这样做。您确实应该使用上述文件之一并写入日志文件。

      log4j.properties 的一个非常简单的例子是

      #Log to Console as 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{yyyy-MM-dd HH:mm:ss} %-5p %c %3x - %m%n
      #Log to file FILE
      log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
      log4j.appender.file.File=logfile.log
      log4j.appender.file.DatePattern='.'yyyy-MM-dd
      log4j.appender.file.append=true
      log4j.appender.file.layout=org.apache.log4j.PatternLayout
      log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c %3x - %m%n
      
      #Root Logger
      log4j.rootLogger=INFO, stdout, file
      

      【讨论】:

        【解决方案4】:

        似乎您的 log4j.properties 不在类路径中。确保它是,并且在您的配置文件中,您有一个定义了名称为“ClientApplicationLog”的记录器。

        【讨论】:

          【解决方案5】:

          这只是警告。

          修复

          当无法找到默认配置文件log4j.propertieslog4j.xml 并且应用程序未执行显式配置时,会发生这种情况。

          要解决这个问题,只需将log4j.propertieslog4j.xml 创建/复制到类路径上的某个位置(通常与 jar 文件相同)。

          可选择设置 java 选项:-Dlog4j.configuration=file:///path/to/log4j.properties

          log4j使用Thread.getContextClassLoader().getResource()定位默认配置文件,不直接检查文件系统。知道放置log4j.propertieslog4j.xml 的适当位置需要了解使用的类加载器的搜索策略。 log4j 不提供默认配置,因为在某些环境中可能禁止向控制台或文件系统输出。

          调试

          为了调试,你可以尝试使用-Dlog4j.debug=true参数。

          log4j.properties的配置

          log4j.properties的示例配置:

          # Set root logger level to DEBUG and its only appender to A1.
          log4j.rootLogger=DEBUG, A1
          
          # A1 is set to be a ConsoleAppender.
          log4j.appender.A1=org.apache.log4j.ConsoleAppender
          
          # A1 uses PatternLayout.
          log4j.appender.A1.layout=org.apache.log4j.PatternLayout
          log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
          
          # Print only messages of level WARN or above in the package com.foo.
          log4j.logger.com.foo=WARN
          

          这是另一个使用多个附加程序的配置文件:

          log4j.rootLogger=debug, stdout, R
          
          log4j.appender.stdout=org.apache.log4j.ConsoleAppender
          log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
          
          # Pattern to output the caller's file name and line number.
          log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
          
          log4j.appender.R=org.apache.log4j.RollingFileAppender
          log4j.appender.R.File=example.log
          
          log4j.appender.R.MaxFileSize=100KB
          # Keep one backup file
          log4j.appender.R.MaxBackupIndex=1
          
          log4j.appender.R.layout=org.apache.log4j.PatternLayout
          log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
          

          Apache Solr

          如果使用 Solr,请将 &lt;solr&gt;/example/resources/log4j.properties 复制到类路径上的某个位置。

          来自 Solr 的 log4j.properties 的示例配置如下:

          #  Logging level
          solr.log=logs/
          log4j.rootLogger=INFO, file, CONSOLE
          
          log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
          
          log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
          log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x \u2013 %m%n
          
          #- size rotation with log cleanup.
          log4j.appender.file=org.apache.log4j.RollingFileAppender
          log4j.appender.file.MaxFileSize=4MB
          log4j.appender.file.MaxBackupIndex=9
          
          #- File to log to and log format
          log4j.appender.file.File=${solr.log}/solr.log
          log4j.appender.file.layout=org.apache.log4j.PatternLayout
          log4j.appender.file.layout.ConversionPattern=%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS}; %C; %m\n
          
          log4j.logger.org.apache.zookeeper=WARN
          log4j.logger.org.apache.hadoop=WARN
          
          # set to INFO to enable infostream log messages
          log4j.logger.org.apache.solr.update.LoggingInfoStream=OFF
          

          另见:

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2022-10-24
            • 1970-01-01
            • 2020-10-08
            • 1970-01-01
            • 2012-06-05
            • 1970-01-01
            • 2012-04-03
            相关资源
            最近更新 更多