我已经把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.

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


当前回答

我在使用log4j2时也遇到了同样的问题。我的问题是由使用错误的依赖库引起的:

<dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <scope>runtime</scope>
    </dependency>

相反,我应该使用:

<dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <scope>runtime</scope>
    </dependency>

在我的情况下,我有一个log4j2.xml定义在我的“资源”目录,并指定使用它:

System.setProperty("log4j.configurationFile", "log4j2.xml");

其他回答

我的Eclipse安装找不到log4j。属性,即使该文件位于src/test/resources。

原因是Eclipse(或m2e连接器)没有将内容从src/test/resources复制到预期的输出文件夹target/test-classes -根本原因是在Java Build Path -> Source选项卡-> Build Path -> src/test/resources下的项目属性中,有一个Excluded: **条目。我去掉了那个被排除的元素。

或者,我可以手动复制src/test/resources/log4j。目标/test-classes/log4j.properties中的属性。

这里的大多数答案都建议使用log4j。属性文件放置在正确的位置(对于maven项目,它应该位于src/main/resources)

但对我来说,问题是log4j。属性配置不正确。这是一个适合我的样品,你可以先试用一下。

# Root logger option
log4j.rootLogger=INFO, stdout

# 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.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %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.请注意您的工作目录、相对路径和类路径。

如果您正在使用Eclipse,并且在之前一切正常工作之后出现了这个问题,请尝试转到Project - Clean - Clean。

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

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