请正确初始化log4j系统。 在运行Web服务时

也许看起来很傻,但我很困惑。 我提到了配置Log4j属性,但它似乎没有帮助。

我写了一个简单的Web服务HelloWorld。 在运行它时我得到的错误是这样的:

log4j:WARN找不到logger(org.apache.axis.transport.http.AxisServlet)的appender。 log4j:WARN请正确初始化log4j系统。

我不确定为什么会发生这种情况。

我使用Eclipse生成Web服务并部署在Tomcat 6.0中。 我查看了Axis Developer’s Guide并根据它们进行了检查

log4j.configuration = log4j.properties使用此系统属性指定Log4J配置文件的名称。 如果未指定,则默认配置文件为log4j.properties。 在axis.jar中提供了log4j.properties文件。

我没有在axis.jar找到log4j.properties。

对此有何帮助?

这些消息是棘手的,足以让人们创建它以使其更清晰: https : //issues.apache.org/bugzilla/show_bug.cgi? id = 25747

它们的棘手之处在于,如果Log4j找不到它的log4j.properties (或log4j.xml )文件,那么就会写入警告,但是如果文件很好又花花公子,但是从配置的角度看它的内容是不完整的。

以下段落摘自: http : //svn.apache.org/repos/asf/logging/log4j/tags/v1_2_9/docs/TROUBLESHOOT.html

使用appender将记录输出写入目标。 如果没有附加到类别或其任何祖先的appender,您将在尝试记录时收到以下消息:

 log4j: No appenders could be found for category (some.category.name). log4j: Please initialize the log4j system properly. 

Log4j没有默认的日志记录目标。 用户有责任确保所有类别都可以inheritanceappender。 这可以通过将appender附加到根类别来轻松实现。

您可以在log4j 文档中找到有关如何配置根记录器( log4j.rootLogger )的信息 ,基本上在文件开头添加如此简单的内容:

 log4j.rootLogger=debug, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n 

这应该清除你在启动时得到的那些WARN消息 (确保你没有一个名为stdout的appender;也要注意你给root logger的级别, debug会非常冗长,你app中的每个库都会开始写东西到控制台)。

至于log4j.properties / log4j.xml ,我建议你将这个文件放在/WEB-INF/classes ,因为重要的是让它暴露出来进行不同的调整(激活/停用日志,更改日志级别等)。 您也可以在类路径中的JAR中(如您在注释中指定的那样),但它将被包含在存档中(希望在存档中的正确位置)并且不会像在它中一样容易处理在/WEB-INF/classes

您必须在classpath文件夹中创建自己的log4j.properties

好吧,如果您已经创建了log4j.properties,那么您可以将其路径添加到类路径中,以便在执行期间找到它。
是的,thingy将在类路径中搜索此文件。
既然你说你看了轴而没找到一个,我假设你没有log4j.properties,所以这里有一个粗略但完整的例子。
在某处创建它并添加到类路径中。 例如,在c:/proj/resources/log4j.properties中

在你的类路径中你简单地添加…….; c:/ proj / resources

 # Root logger option log4j.rootLogger=DEBUG, stdout, file # Redirect log messages to console 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{1}:%L - %m%n # Redirect log messages to a log file, support file rolling. log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.File=c:/project/resources/t-output/log4j-application.log log4j.appender.file.MaxFileSize=5MB log4j.appender.file.MaxBackupIndex=10 log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n 

警告没有为记录器找到appender意味着您正在使用log4j日志记录系统,但是您没有在配置文件中添加任何Appender(例如FileAppender,ConsoleAppender,SocketAppender,SyslogAppender等)或者配置文件丢失。

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

如果您存在属性文件(例如,在安装Solr时),则需要将此文件放在classpath目录中。

类路径

以下是一些命令建议如何确定类路径值:

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

或者来自Java: System.getProperty("java.class.path")

Tomcat的

如果您使用的是Tomcat,则可以将log4j.properties放入: /usr/share/tomcat?/lib//var/lib/tomcat?/webapps/*/WEB-INF/lib/文件夹。

Solr的

作为参考,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 

如果您的类中存在以下语句,则您的log4j.properties应该位于java source(src)文件夹中,如果它是jar可执行文件,则应该在jar中打包而不是单独的文件。

 static Logger log = Logger.getLogger(MyClass.class); 

谢谢,