我已经把log4j放到了我的buildpath中,但是当我运行我的应用程序时,我得到了以下消息:

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

这些警告是什么意思?这里的阑尾是什么?


当前回答

快速的解决方案:

为main函数添加代码: String log4jConfPath = "/path/to/log4j.properties"; PropertyConfigurator.configure (log4jConfPath); 创建一个名为log4j的文件。/path/to的属性 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{yy/MM/dd HH: MM:ss} %p %c{2}: %m%n

其他回答

这只是一个警告。

修复

这发生在默认配置文件log4j。找不到属性和log4j.xml,应用程序没有执行显式配置。

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

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

log4j使用Thread.getContextClassLoader(). getresource()来定位默认配置文件,而不直接检查文件系统。知道放置log4j的适当位置。属性或log4j.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,拷贝< Solr >/example/resources/log4j。属性转移到类路径上的位置。

log4j的示例配置。Solr的属性如下:

#  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的简短介绍:默认初始化过程 为什么log4j不能在J2EE或WAR应用程序中找到我的属性?

当我试图运行单元测试时,在IntelliJ中得到这个错误消息。我同时打开了Eclipse和IntelliJ,这可能导致了这个问题。在我关闭两个IDE并运行maven命令行构建后,错误就消失了。

首先导入:

 import org.apache.log4j.PropertyConfigurator;

然后将以下代码添加到main方法:

String log4jConfPath ="path to/log4j.properties";
PropertyConfigurator.configure(log4jConfPath);

创建一个路径为的文件,并将以下代码添加到该文件中。

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{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n

考虑log4j JVM参数Dlog4j.configuration

一般来说:

添加指向log4j配置文件的JVM参数。 语法如下:

java [ options ] -jar file.jar [ arguments ]

一个真实的命令行示例如下所示:

java -Dlog4j.configuration=conf/log4j.xml -jar myJarFile.jar myArg1 myArg2

对于IntelliJ IDE用户:

1.Run/Debug Configurations
2.Edit configurations...
3.VM options
4.Enter the same value also starting with "-D"

小贴士:

1.Eclipse IDE用户将找到等效的方法

2.对于运行/调试配置编辑器,很可能在开始时,您的特定可执行文件不存在。根据您当前正在处理的项目的大小,在目录中找到它可能会令人不快。如果在继续运行/调试配置之前只运行/执行一次文件(单击play),无论执行结果是什么,都不会太麻烦。

3.请注意您的工作目录、相对路径和类路径。

在代码中使用Logger记录消息。Appender是附加到Logger的对象,用于将消息写入特定目标。FileAppender用于写入文本文件,ConsoleAppender用于写入控制台。您需要显示Logger和Appender设置的代码以获得更多帮助。

为了更好地理解Logger和Appender的交互,请阅读教程。