我喜欢用log4j
loger来完成我的简单项目。
但是当我运行项目时,我会在控制台的log4j上发出紧急警告:
log4j:WARN No appenders could be found for logger (org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
我无法弄清楚为什么会发生这种情况。
我添加并下载了与Maven一起使用的log4j,这一切都应该可以。
我指定了apeender,我觉得它应该可以正常工作 但是你可以看到它不是。
以下是我log4j.xml
的内容:
<!-- Appenders -->
<!-- Loggin into console -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p: %c - %m%n" />
</layout>
</appender>
<appender name="file" class="org.apache.log4j.DailyRollingFileAppender">
<param name="file" value="/logs/log.log" />
<param name="DatePattern" value="'.'yyyy-MM-dd" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p (%F:%L:%M) %c{1} - %m%n" />
</layout>
</appender>
<!-- Root logger -->
<root>
<priority value="info" />
<appender-ref ref="file" />
<appender-ref ref="console" />
</root>
<!-- Application Loggers -->
<logger name="com.softserve.edu">
<level value="info" />
</logger>
我错过了标准页眉和页脚(标签)。
一个很滑的地方是这个文件进入logs
文件夹不存在(我想log4j会自己创建它)。
这是我的项目进展:
更新
我在src/test/resources
下创建了新文件夹,并将log4j.xml
移至。
现在一切正常,但是没有创建log
文件。
此行<param name="file" value="/logs/log.log" />
有什么问题?
答案 0 :(得分:2)
您的log4j.xml文件需要放在目录src / main / resources中。 Log4J希望在类路径的根目录找到它。
资源目录是放置所有非Java代码但你想要进入类路径的东西的地方。如果它只是测试应该使用的东西,把它放在src / test / resources中,否则使用src / main / resources。
答案 1 :(得分:2)
我最终努力自己回答这个问题,所以:在l0g4j网站上,这是一个FAQ,错误实际上指向了你。
http://logging.apache.org/log4j/1.2/faq.html#noconfig
正如你所知道的(但对于遇到这个常见错误的外行人):Appender是输出的地方。您可以拥有控制台Appender,文件Appender以及其他所有在指示中拼写的内容。
当log4j告诉你它没有注册Appender时,它告诉你输出无处可去。这就是为什么,除了错误之外,你的应用程序可能是沉默的。
鉴于你确实已经指定了Appender,错误实际上只是其中的一件事。
如果Appender以某种方式出现格式错误,您可能会看到一个解析异常,所以这可能不是问题。
但是,如果无法找到日志配置文件.....你会看到这个问题!您的应用程序很可能根本看不到配置文件,并且正在尝试使用默认值。
如何进入这种状态包括:
当您将文件放入./src/main/resources时,Maven实际上将logger.xml捆绑到jar中。这将它放在类路径上,这是记录器默认查看的位置(显然jar在类路径上)。
但是,许多用户不希望在“二进制”jar中看到在内部的日志记录配置。如果你必须重新编译,或者基本上对zip文件中的配置进行凌乱的就地编辑,那么配置日志级别有什么意义呢?因此,对于许多人来说,Nathan Hughes的答案是不回答的,这就是为什么值得谈论其他场景的原因。
如果您已经使用jar打包了配置文件,那么软件就没有找到正确的位置。如果您已经完成了自己移动文件的任何工作,那么您可能已经隐藏了自己的log4j.xml文件。
但是,您很可能使用maven约定./src/main/config/log4j.xml打包文件。如果是这种情况,则问题是您的软件未配置为查找它。
一种方法是在调用应用程序时在命令行上指定
-Dlog4j.configuration=file:conf/log4j.xml
如果您是代码中的硬代码(我不是)的粉丝,那么应该是一个电话
对于.properties文件:
File log4jfile = new File("./conf/log4j.properties");
PropertyConfigurator.configure(log4jfile.getAbsolutePath());
对于.xml文件:
DOMConfigurator.configure("file:///conf/log4j.xml");
Logger log = Logger.getLogger(YourClass.class);