在我的应用程序中加入log4j后,每次我执行我的应用程序时都会得到以下输出。
log4j:WARN No appenders could be found for logger (slideselector.faceata.FaceDataParser). log4j:WARN 请正确初始化log4j系统。
似乎这意味着缺少一个配置文件。 这个配置文件应该位于哪里,什么是好的开始内容?
我使用普通的java来开发一个桌面应用程序。所以没有webserver等...
Log4j默认在classpath上寻找一个名为log4j.properties或log4j.xml的文件。 你可以通过设置系统属性来控制它使用哪个文件来初始化自己,如这里所述(寻找"默认初始化程序" 部分)。
比如说。
java -Dlog4j.configuration=customName ....
将导致log4j在classpath上寻找一个名为customName的文件。
如果你遇到问题,我发现打开log4j.debug是有帮助的。
-Dlog4j.debug
它将向System.out打印很多有用的信息,比如它用哪个文件来初始化自己,哪些记录器/应用者被配置了,如何配置等等。
配置文件可以是一个java属性文件或一个xml文件。下面是一个来自log4j介绍文档页面的属性文件格式样本。
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
在网上找到一个log4j.properties或log4j.xml,它有一个根appender,并把它放在你的classpath上。
### 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,尤其是对于调试来说。
就我个人而言,我设置了多个记录器,并将根记录器设置为警告或错误级别,而不是调试。
你是用什么开发的?你在使用Apache Tomcat吗?
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=%d{yyyyMMdd HH:mm:ss.SSS} [[%5p] %c{1} [%t]] %m%n
我的一个Java应用中就有这样的属性。