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

Log4j:以编程方式更改日志级别,该级别适用于待创建的记录器

晏华奥
2023-03-14

我在代码中声明记录器如下:

Logger logger = LoggerFactory.getLogger(MyClass.class);

我希望能够在运行时以编程方式更改日志记录器的日志级别。我曾尝试通过LogManager在存储库中迭代日志记录者,但它只将新的日志级别应用于代码中实例化的日志记录者。如果创建了新的记录器实例,则它不会使用新的日志级别。我的要求是,我的web应用程序中的日志级别需要通过管理GUI进行配置,并且这个新的日志级别需要应用于我代码中的所有记录器(不包括第三方库日志记录,例如JSF、Spring、Hibernate等)。

我现在所做的不符合我的要求,因为它没有将日志级别应用于新实例化的记录器:

Enumeration<Logger> currentLoggers = LogManager.getCurrentLoggers();
while(currentLoggers.hasMoreElements()) {
    Logger logger = currentLoggers.nextElement();
    if (StringUtils.startsWith(logger.getName(), "com.my.company")) {
        logger.setLevel(logLevel);
    }
}

我正在使用Log4j 1.2.17。

共有1个答案

谯翔
2023-03-14

再也找不到资源了,但是关于我褪色的记忆LogManager。getLogger(“com.my.company”)。setLevel(whateverloglevel)应该完成这项工作。

使用LogManager创建的所有记录器。getLogger(MyClass.class)其中MyClass位于com中。我的将受到影响的公司或其子树。

whateverloglevel是以下级别之一:

请注意,这可能在log4j 2中不起作用。

对于(我认为)版本

  • log4j常见问题解答
  • 编程方式更改Log4j2中的日志级别
 类似资料:
  • 以编程方式更改我的附加程序的日志级别,或者受到其他来源的影响。 亲爱的社区。 Log4J2版本为:2.12。0 我的应用程序正在使用log4j2。xml,日志级别设置为INFO。我的应用程序也在读取另一个配置文件,我想在其中为我的用户设置日志级别,例如DEBUG。 当应用程序初始化时(从log4j2.xml),我想将all的级别更改为DEBUG from second source作为示例。所以我

  • 问题内容: 我对以编程方式更改Log4j2中的日志级别感兴趣。我尝试查看他们的配置文档,但似乎没有任何内容。我也尝试在包中查找:,但其中的任何内容看起来都没有帮助。 问题答案: 根据log4j2 2.4版常见问题进行编辑 您可以使用Log4j Core中的Configurator类设置记录器的级别。 但是请 注意,Configurator类不是公共API的一部分。 资源 编辑以反映Log4j2 2

  • 我对以编程方式更改log4j2中的日志级别感兴趣。我试着查看了他们的配置文档,但似乎没有任何内容。我还试着查看了这个包:,但里面也没有什么有用的东西。

  • 我目前正在尝试降低我在java项目中使用的PDFBox 1.8.6库的日志记录级别,但失败了。基于前面的问题,我在 /src/目录中有以下log4j.properties文件。 我不确定我还遗漏了什么,因为我仍然在控制台中收到类似以下消息的垃圾邮件。 如果有一种方法可以通过编程方式更改日志级别,那么我根本不会附加到属性文件,因为我在其他任何地方都不使用log4j。我不知道它是否使用log4j。属性

  • 问题内容: 我有以下logback.xml文件: 现在,在发生特定事件时,我想以编程方式将root记录程序的级别从 debug 更改为 error 。我不能使用变量替换,这是我必须在代码内执行的操作。 如何做呢 ?谢谢。 问题答案: 试试这个: 请注意,您还可以告诉logback定期扫描您的配置文件,如下所示:

  • 我正在尝试创建基于不同级别的“不同”附加器,但到目前为止,我找不到一种隔离日志级别的方法。。。。 我需要一种方法,能够土地只有INFO优先排序的日志被追加。因为INFO级别的日志记录也会显示DEBUG标记的日志记录器...这对我没有帮助。 另一件事是,对于“相同”包,我无法定义不同的日志附加器: 在这里,我得到了如下错误: