问这个问题看起来很傻,但我很困惑。我提到Configuring Log4j property,但似乎没有帮助。
我写了一个简单的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
。
对此有何帮助?
答案 0 :(得分:38)
这些消息很棘手,足以让人们创建它以使其更清晰: 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没有默认的日志记录目标。用户有责任确保所有类别都可以继承appender。这可以通过将appender附加到根类别来轻松实现。
您可以在log4j documentation中找到有关如何配置根记录器(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
将非常冗长,您应用中的每个库都会开始将内容写入控制台。
关于log4j.properties
/ log4j.xml
,我建议您将此文件放在/WEB-INF/classes
中,因为重要的是让它暴露于不同的调整(激活/停用日志,更改日志级别)等等)。您也可以在类路径中的JAR中(如您在注释中指定的那样),但它将被包含在存档中(希望在存档中的正确位置)并且不会像在它中一样容易处理在/WEB-INF/classes
。
答案 1 :(得分:4)
您必须在classpath文件夹中创建自己的log4j.properties
。
答案 2 :(得分:2)
好吧,如果您已经创建了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
答案 3 :(得分:1)
如果您的类中存在以下语句,那么您的log4j.properties应该位于java source(src)文件夹中,如果它是jar可执行文件,则应该在jar中打包而不是单独的文件。
this
谢谢,
答案 4 :(得分:0)
警告找不到记录器的追加器意味着你正在使用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,则可以将log4j.properties
放入:/usr/share/tomcat?/lib/
或/var/lib/tomcat?/webapps/*/WEB-INF/lib/
文件夹。
作为参考,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
答案 5 :(得分:0)
如果您使用的是Logger.getLogger(ClassName.class)
,则将log4j.properties
文件放在您的课程路径中:
yourproject/javaresoures/src/log4j.properties (Put inside src folder)
答案 6 :(得分:0)
您可以像上述答案一样配置log4j.properties,或使用org.apache.log4j.BasicConfigurator
public class FooImpl implements Foo {
private static final Logger LOGGER = Logger.getLogger(FooBar.class);
public Object createObject() {
BasicConfigurator.configure();
LOGGER.info("something");
return new Object();
}
}
因此在该表下,配置do:
configure() {
Logger root = Logger.getRootLogger();
root.addAppender(new ConsoleAppender(
new PatternLayout(PatternLayout.TTCC_CONVERSION_PATTERN)));
}