1

简而言之:如何在 Web 应用程序中使用的第三方 jar 中配置一些 Log4j 记录器,以便它停止写出警告,例如

log4j:WARN No appenders could be found for logger (org.apache.activemq.transport.WireFormatNegotiator).
log4j:WARN Please initialize the log4j system properly.

并防止干净的关机引发错误,例如

Exception in thread "InactivityMonitor WriteCheck" java.lang.NullPointerException
Exception in thread "InactivityMonitor ReadCheck" at java.util.TimerThread.run(Unknown Source) java.lang.NullPointerException

细节:

我正在编写一个使用 Apache ActiveMQ 的 Tomcat Web 应用程序。除了activemq-all-5.5.1.jar我必须将以下库放在类路径上以摆脱类路径问题:

  • log4j-1.2.15.jar
  • slf4j-api-1.5.11.jar
  • slf4j-log4j12-1.5.11.jar

现在我的应用程序开始打印上面那个警告。Apache ActiveMQ 网站上有一个链接,但不幸的是它已损坏,并且Log4j wiki已离线。

我尝试按照此处所述创建一个名为log4j.xml的文件并将其放在WEB-INF/目录中(我希望它属于该目录),但我也尝试将其与我的源代码一起放入“默认包”中(即WEB-INF/classes/)。我还尝试了向文件中添加 XML 标头的方法,正如我在此处看到的那样。它们都不能在任何一个位置工作。我在其他地方读到,必须通过将参数传递给 JVM 来传递位置,但这不能在 Web 应用程序上下文中使用。用于 Web 应用程序的Log4j 教程展示了如何使用web.xml对其进行配置,但这需要库包含一个扩展的类-Dlog4j.configuration=HttpServlet. 我想 Active MQ 中没有这样的类,即使,我怎么能找到它呢?

也许我在吠叫完全错误的树,我不必配置 Log4j 本身,而是 Slf4j 它将默默地为我配置 Log4j?

只要我不需要它,哪种是干净地关闭该记录器的最简单方法?

4

2 回答 2

1

摆脱此消息的方法是正确设置 Log4J 配置。创建一个log4j.properties文件并将其放置在WEB-INF/classes如下所述的此处

于 2013-08-01T09:26:48.513 回答
1

要删除这些消息,请创建一个名为log4j.xml以下内​​容的文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration threshold="off">
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <param name="Threshold" value="off" />
    </appender>
    <appender name="rolling-file" class="org.apache.log4j.ConsoleAppender">
        <param name="Threshold" value="off" />
    </appender>
</log4j:configuration>

将文件拖放到“默认包”中。在 IDE 中,这通常是一个名为/src. 在 Web 应用程序设计中,这将映射到/WEB-INF/classes构建期间。

于 2013-09-03T07:39:35.000 回答