gpt4 book ai didi

java - 某些第三方库的 Logback 默认为 Debug模式

转载 作者:行者123 更新时间:2023-11-29 09:00:48 25 4
gpt4 key购买 nike

我们使用 slf4j 和 logback 来登录我们的 Java EE Web 应用程序。最近,为了将这些库移动到 glassfish 应用服务器中的一个公共(public)位置(特别是 glassfish\lib 目录),我们进行了一些配置更改。我们在 web.xml 文件中进行了更改以添加 JNDI 条目并重命名为 logback.xmllogback-<context-name>.xmlhere 中所述. logback-<context-name>.xml放在WEB-INF\classes目录下。

此更改后,hibernate 和 http-client 库的日志记录默认为 Debug模式,因此需要进行大量日志记录。根记录器具有 INFO 日志级别,并且没有为 hibernate 和 http 客户端库定义特定的记录器。

如果我还原此更改,即删除 web.xml 中的 jndi 条目并将配置文件重命名为 logback.xml,则只会按预期记录 INFO 日志。

对可能出现的问题有什么建议吗?

谢谢。

更新

在进一步排除故障时,我发布了 hibernate 和 apache 客户端库使用在初始化期间创建的默认记录器上下文。此记录器上下文的根日志级别设置为 DEBUG。我们使用 JNDI 作为上下文选择器。

奇怪的是,当 ConnectionManager 类(hibernate 类 - org.hibernate.jdbc.ConnectionManager)尝试实例化记录器时,在运行时找不到上下文名称。记录器实例创建调用 ContextJNDISelector.getLoggerContext() 方法。此方法执行 JNDI 查找但未找到该条目。

我通过在 servlet 上下文监听器中生成一个线程以每 3 秒打印一次 JNDI 条目 (java:comp/env/logback/context-name) 来进一步排除故障。来自线程的日志表明 JNDI 条目始终存在。

知道为什么当 ContextJNDISelector 查询时在 JNDI 中找不到 contextName 吗?

最佳答案

这似乎是个问题,因为应用程序使用了 EJB。应用程序服务器 (glassfish) 在实际设置日志上下文之前加载 EJB。因此,一些库的日志消息被记录在 DEBUG 级别下。在记录器周围使用包装器类解决了这个问题。包装类延迟了记录器的创建,直到它第一次使用。


public class LogWrapper {
private Class loggerClass;
private Logger logger;

public LogWrapper(Class loggerClass) {
this.loggerClass = loggerClass; //lazy logging context creation (to avoid issues with static instances in EJBs which get loaded on startup before logging ctx name is actually set)
}

/**
* For lazy init of logger, on first actual use, so the logger context will be correctly set even when used by EJBs (loaded by classloader too soon, before logging context is actually set)
*/
private Logger getLogger() {
if (logger == null) {
logger = LoggerFactory.getLogger(loggerClass);
loggerClass = null;
}
return logger;
}

public void info(String message) {
getLogger().info(message);
}

关于java - 某些第三方库的 Logback 默认为 Debug模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17611813/

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