初始化时Log4j警告?

时间:2011-10-07 09:41:02

标签: java log4j warnings

我正在尝试了解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.
你知道我哪里错了吗?

谢谢大家

5 个答案:

答案 0 :(得分:28)

您错过了类路径中的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

答案 1 :(得分:4)

你需要在类路径的某个地方有一个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>

答案 2 :(得分:3)

这只是警告。

修复

当找不到默认配置文件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

这是另一个使用多个appender的配置文件:

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,请将<solr>/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

另见:

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

好像你的log4j.properties不在类路径中。确保它在您的配置文件中,您有一个名为“ClientApplicationLog”的记录器。