gpt4 book ai didi

java - 如何为 JBoss 7.2 配置 slf4j - log4j 每次部署日志记录

转载 作者:行者123 更新时间:2023-11-30 04:13:36 26 4
gpt4 key购买 nike

在我的 WAR 中,我想使用 log4j.properties (位于 WEB-INF/classes 中)拥有自己的设置。按部署日志记录,如所述 here不起作用,即 JBoss 不会从我的应用程序中记录任何内容。我的简单应用程序(用于重现问题)包含:

WEB-INF/classes/log4j.properties
WEB-INF/classes/logging/LoggingContextListener.class
WEB-INF/lib/log4j-1.2.17.jar
WEB-INF/lib/slf4j-api-1.7.5.jar
WEB-INF/lib/slf4j-log4j12-1.7.5.jar

其中 LoggingContextListener 仅记录一些随机字符串。log4j.properties 包含:

log4j.rootLogger=WARN, 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

有人遇到过类似的问题吗?

你知道它是否可以修复吗?怎么办?

为了避免对日志阈值产生混淆,这里是 LoggingContextListener

System.err.println("Trying to log something using SLF4J-Log4J");
org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(getClass());
logger.error("Hello");
logger.warn("anybody home?");
logger.info("can you hear me?");
logger.debug("WTF?");
System.err.println("Did you notice any logs?");

当我从类路径中删除 log4j.properties 时,我得到:

ERROR [stderr] (ServerService Thread Pool -- 54) Trying to log something using SLF4J-Log4J
ERROR [logging.LoggingContextListener] (ServerService Thread Pool -- 54) Hello
WARN [logging.LoggingContextListener] (ServerService Thread Pool -- 54) anybody home?
INFO [logging.LoggingContextListener] (ServerService Thread Pool -- 54) can you hear me?
ERROR [stderr] (ServerService Thread Pool -- 54) Did you notice any logs?

但这些日志直接来自在 standalone.xml 中配置的 JBoss 记录器 - 不是我想要的。

最佳答案

这个问题有一个丑陋的解决方法(这不是我问题的正确答案):

Properties props = new Properties();
props.load(getClass().getResourceAsStream("/log4j.xxx.properties"));
PropertyConfigurator.configure(props);

此代码应该只执行一次,因此最好在您自己的某些 ServletContextListener 实现中执行。请小心 - 您必须重命名 log4j.properties,否则 JBoss 将“处理”它并吞掉您的所有日志。

但这首先应该由 JBoss 完成!至少他们在文档中是这么写的。

这是一个明显的错误,所以我将在他们的 JIRA 上报告它

PS。有趣的是:当您的类路径中有 log4j 时,无论如何都不会考虑它 - 即使部署模块应该独立于根。 JBoss 使用国产 log4j implementation 。结果:当您尝试调用时:

PropertyConfigurator.configure(getClass().getResourceAsStream("/log4j.xxx.properties"));

在构建类路径中拥有原始的log4j,您将在运行时得到NoSuchMethodException,因为它们的PropertyConfigurator没有实现configure(java.io.InputStream)。不酷:(

关于java - 如何为 JBoss 7.2 配置 slf4j - log4j 每次部署日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18975967/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com