【问题标题】:Change Log4j threshold for the duration of a call更改通话期间的 Log4j 阈值
【发布时间】:2013-04-04 13:32:29
【问题描述】:

我有一个带有多个记录器的 log4j,用于多线程应用程序的附加程序。在一种情况下,我将尝试连接到远程服务。如果连接失败,我会反复尝试。

我只希望 log4j 第一次使用它的原始配置。但是对于所有其他后续尝试,我想使用不那么冗长的配置。这不应更改可能在相同对象上运行的其他线程的日志记录配置。请注意,我无法提前知道调用中使用了哪些记录器来连接到远程服务。

那么,有没有一种方法可以在一次调用期间全局更改日志记录而不改变其他并发线程的行为?

【问题讨论】:

    标签: java logging log4j


    【解决方案1】:

    看看这部分 API:

    http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Logger.html

    您可以调用 setLevel(Level lev) 方法并进行一些更改。但是,我不能 100% 确定您不会影响其他线程,因为 Logger 通常基于一个类。

    我认为您必须为每个用户会话获取一个 Logger 对象,但我不能 100% 确定它是否会导致堆问题。

    也许可以控制代码的输出(例如,如果是第一次尝试,则只向日志发送一些消息)。

    问候

    【讨论】:

    • 谢谢,但是 setLevel 确实会影响其他线程。否则,我无权访问记录消息的代码。我只能对 log4j 配置采取行动。
    • 嗯,这将非常困难,因为您将无法修改记录器的行为。除非其他人看到了一些技巧,否则我认为不接触源代码就不可能做你想做的事。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多