我们使用 slf4j 和 logback 来登录我们的 java ee Web 应用程序。最近为了将这些库移动到 glassfish 应用服务器中的一个公共位置(特别是到 glassfish\lib 目录),我们进行了一些配置更改。我们在 web.xml 文件中进行了更改以添加 JNDI 条目并将其重命名logback.xml
为此处logback-<context-name>.xml
指定的内容。放在WEB-INF\classes 目录下。logback-<context-name>.xml
在此更改之后,hibernate 和 http-client 库的日志记录默认为调试模式,因此需要进行大量日志记录。根记录器具有 INFO 日志级别,并且没有为 hibernate 和 http-client 库定义特定的记录器。
如果我恢复此更改,即删除 web.xml 中的 jndi 条目并将配置文件重命名为 logback.xml,则只会按预期记录 INFO 日志。
关于可能是什么问题的任何建议?
谢谢。
更新
在进一步排除故障时,我发布了 hibernate 和 apache 客户端库使用在初始化期间创建的默认记录器上下文。此记录器上下文将根日志级别设置为调试。我们使用 JNDI 作为上下文选择器。
奇怪的是,当 ConnectionManager 类(hibernate 类 - org.hibernate.jdbc.ConnectionManager)尝试实例化记录器时,在运行时找不到上下文名称。Logger 实例创建调用 ContextJNDISelector.getLoggerContext() 方法。此方法执行 JNDI 查找但未找到条目。
我通过在 servlet 上下文侦听器中生成一个线程来进一步排除故障,以每 3 秒打印一次 JNDI 条目 (java:comp/env/logback/context-name)。来自线程的日志表明 JNDI 条目始终存在。
任何想法为什么在 ContextJNDISelector 查询时在 JNDI 中找不到 contextName?