在添加log4j到我的应用程序后,每次执行我的应用程序时,我都会得到以下输出:

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

这似乎意味着一个配置文件丢失了。 这个配置文件应该放在哪里,一个好的开始内容是什么?

我正在使用纯java开发桌面应用程序。所以没有网络服务器等等…


当前回答

我已经创建了文件log4j。hibernate.cfg.xml文件旁边的资源文件夹中的属性,并用下面的文本填充:

log4j.rootLogger=INFO, CONSOLE

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c{1}:%L] %m%n

现在我去掉了警告和错误

其他回答

找到一个log4j。属性或log4j.xml,它具有根追加器,并将其放在类路径中。

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
log4j.rootLogger=debug, stdout

将登录到控制台。我更喜欢记录而不是文件,这样您就可以事后进行调查。

log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.maxFileSize=100KB
log4j.appender.file.maxBackupIndex=5
log4j.appender.file.File=test.log
log4j.appender.file.threshold=debug
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.rootLogger=debug,file

尽管对于详细日志记录应用程序,100KB通常需要增加到1MB或10MB,特别是调试。

我个人设置了多个记录器,并将根记录器设置为警告或错误级别,而不是调试级别。

如果你把所有东西都扔掉(比如你在考试)

org.apache.log4j.BasicConfigurator.configure(new NullAppender());

虽然正确地设置log4j对于“真正的”项目很好,但你可能想要一个快速而肮脏的解决方案,例如,如果你只是在测试一个新库。

如果是,则调用静态方法

org.apache.log4j.BasicConfigurator.configure();

将在控制台设置基本日志记录,错误消息将消失。

对我来说,解决办法是添加“log4j”。将“属性”放入“src”文件夹。

根据Apache Log4j FAQ页面:

Why do I see a warning about "No appenders found for logger" and "Please configure log4j properly"? This occurs when the default configuration files log4j.properties and log4j.xml can not be found and the application performs no explicit configuration. log4j uses Thread.getContextClassLoader().getResource() to locate the default configuration files and does not directly check the file system. Knowing the appropriate location to place log4j.properties or log4j.xml requires understanding the search strategy of the class loader in use. log4j does not provide a default configuration since output to the console or to the file system may be prohibited in some environments.

基本上,警告No appenders could be found for logger意味着您正在使用log4j日志记录系统,但是您还没有在配置文件中添加任何appenders(例如FileAppender, ConsoleAppender, SocketAppender, SyslogAppender等),或者配置文件丢失。

配置log4j有三种方法:使用属性文件(log4j.properties)、使用XML文件和通过Java代码(rootLogger. properties)。新NullAppender addAppender(());。

log4j . properties

如果你有属性文件(例如安装Solr时),你需要把这个文件放在你的类路径目录中。

类路径

下面是Linux中如何确定类路径值的一些命令建议:

$ echo $CLASSPATH
$ ps wuax | grep -i classpath
$ grep -Ri classpath /etc/tomcat? /var/lib/tomcat?/conf /usr/share/tomcat?

或者从Java: System.getProperty(" Java .class.path")。

Log4j XML

下面是log4j的XML格式的基本XML配置文件:

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

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
  <appender name="console" class="org.apache.log4j.ConsoleAppender"> 
    <param name="Target" value="System.out"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/> 
    </layout> 
  </appender> 

  <root> 
    <priority value ="debug" /> 
    <appender-ref ref="console" /> 
  </root>
  
</log4j:configuration>

Tomcat

如果您正在使用Tomcat,您可以放置您的log4j。属性到/usr/share/tomcat?/lib/ /var/lib/tomcat?/ webapps / * / web - inf / lib文件夹中。

Solr

作为参考,Solr default log4j。属性文件如下所示:

#  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

为什么log4j不能在J2EE或WAR应用程序中找到我的属性文件?

简单的回答是:log4j类和属性文件不在同一个类加载器的范围内。 Log4j只使用默认的Class.forName()机制来加载类。资源的处理类似。有关更多细节,请参阅java.lang.ClassLoader的文档。 因此,如果遇到问题,请尝试自己加载类或资源。如果您找不到它,那么log4j也找不到。;)


参见:

Apache站点上log4j的简短介绍 Apache:日志服务:Apache站点的常见问题