【问题标题】:Singleton, startup and log4j initialization: No appenders could be found for logger单例、启动和 log4j 初始化:找不到记录器的附加程序
【发布时间】:2017-04-02 11:07:05
【问题描述】:

我们这样写了一个简单的类:

import org.apache.log4j.Logger;
[...]
@Singleton
@Startup
public class ContactFormScheduler {

private static final Logger log = Logger.getLogger(ContactFormScheduler.class); 

[...]

当我们启动服务器(WildFly 10.1.0)时,出现以下错误:

15:35:27,142 错误 [stderr] (ServerService 线程池 -- 58) log4j:WARN 找不到记录器 (com.test.ContactFormScheduler) 的附加程序。

15:35:27,143 ERROR [stderr] (ServerService Thread Pool -- 58) log4j:WARN 请正确初始化 log4j 系统。

有什么提示吗?初始化 log4j 的最佳方法是什么?

在 web.xml 中:

<context-param>
    <param-name>log4j-config-location</param-name>
    <param-value>/WEB-INF/log4j.properties</param-value> 
</context-param>

在 jboss-deployment-structure.xml 中

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
<deployment>
    <!-- Exclusions allow you to prevent the server from automatically adding some dependencies -->
    <exclusions>
        <module name="org.apache.log4j" />
    </exclusions>
</deployment>
</jboss-deployment-structure>

其他类正确记录。

谢谢 安德烈亚

【问题讨论】:

  • 你用什么来配置log4j?
  • 我用配置编辑了我的问题
  • @Startup EJB 在应用程序初始化期间被调用。我假设 Wildfly 在应用程序初始化(部署)阶段没有初始化 Log4J,所以这就是你收到错误的原因。
  • 好的。所以我应该尝试将 LOG4J 初始化放在 EJB 之前。有什么提示吗?

标签: java log4j singleton wildfly startup


【解决方案1】:

如果您从 WAR/lib 目录中排除 log4j,请删除 jboss-deployment-structure.xml 并将 log4j.properties 移动到 WAR/WEB-INF/classes WildFly 会自动为您的部署配置 log4j。

如果您更愿意使用自己的 log4j 版本,您仍然需要将您的 log4j.properties 移动到 WAR/WEB-INF/classes 目录,因为 log4j 无法从 WAR/WEB-INF 目录中读取任何内容。

【讨论】:

  • 其他日志调用工作正常。我认为问题与加载 log4j 和单例的顺序有关。如果我把 log = Logger.getLogger(ContactFormScheduler.class); “之后”在执行中起作用
猜你喜欢
  • 2012-09-13
  • 1970-01-01
  • 2015-07-23
  • 1970-01-01
  • 2016-04-07
  • 2015-06-11
  • 1970-01-01
相关资源
最近更新 更多