当前位置: 首页 > 知识库问答 >
问题:

某些第三方库的Logback默认为调试模式

司空学智
2023-03-14

我们使用slf4j和logback来登录java ee web应用程序。最近,为了将这些库移动到glassfish应用程序服务器中的一个公共位置(具体到glassfish\lib目录),我们进行了一些配置更改。我们在网络上做了改变。xml文件,以添加JNDI条目并重命名logback。xml到logback-

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

如果我恢复此更改,即删除web中的jndi条目。xml并将配置文件重命名为logback。xml,只按预期记录信息日志。

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

谢谢

使现代化

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

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

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

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

共有1个答案

孙经艺
2023-03-14

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


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);
    }


 类似资料:
  • 我通过以下步骤针对libc,libc abi,编译器-rt构建clang: > < li> 为了下载(和更新)llvm和子项目,我使用了以下脚本: 首先,我使用 gcc 针对 libgcc 和 libstdc 构建 llvm、clang、libunwind,并将它们安装在 / 中。在以下所有步骤中,除了最后一个,我都使用这个新鲜的叮当。 (我几乎可以肯定,这里没有一个步骤是多余的。) 在最后一步,

  • Logback 1.1.3留档没有指出如果用户不设置默认字符集,它将是什么,但源代码说: 默认情况下,此属性的值为null,对应于系统的默认字符集。 然而,我使用的是PatternLayoutCoder(带有滚动文件附加器),它似乎是以UTF-8格式输出文件(我的Windows 7 Professional系统的默认字符集可能不是UTF-8)。 UTF-8输出实际上是我想要的,但我想确保我不是偶然

  • 第三方库 ThinkCMF 内置了以下第三方库,如果你项目中需要增加其它第三库,也可以通过 composer自己安装,但以后升级应注意不要覆盖 vendor目录,而是使用 composer update去更新第三方库 "topthink/think-orm": "^2.0", "topthink/think-captcha": "^3.0",

  • 你们要爱惜光阴,用智慧与外人交往。你们的言语要常常带着和气,好像用盐调和,就可知道怎样回答各人。(COLOSSIANS 4:5-6) 第三方库 标准库的内容已经非常多了,前面仅仅列举几个,但是Python给编程者的支持不仅仅在于标准库,它还有不可胜数的第三方库。因此,如果作为一个Pythoner,即使你达到了master的水平,在做某个事情之前最好在网上搜一下是否有标准库或者第三方库替你完成。因为

  • 本文向大家介绍如何安装第三方模块?以及用过哪些第三方模块?相关面试题,主要包含被问及如何安装第三方模块?以及用过哪些第三方模块?时的应答技巧和注意事项,需要的朋友参考一下   用过的第三方模块:requests,pymysql,DbUtils,SQLAlchemy等  

  • 随着 beego 的发展, 基于 beego 的第三方库也逐渐的增加,如果大家有基于 beego 的库,欢迎递交你的地址 gorelic 支付宝 SDK pongo2 keenio casbin - RBAC ACL plugins