Log4j2,在运行时为特定于线程

时间:2016-08-18 18:04:53

标签: java log4j2

我们有一个网络服务器,有多个用户登录。我们通常将日志级别设置为ERROR或INFO级别。但有时,出于调试目的,我们需要查看日志。有one way在运行时设置它,但是在流量加载的情况下这个过程不太好。重要日志将被遗漏,我们也不知道我们需要多长时间才能保持这种状态。我在log4j v1.2中编写了一个包装器,如果userid属于某个TestUsersList,它只会忽略级别检查。因此,它仅为特定用户[线程]打开所有日志。一个片段在下面 -

public void trace(Object message) {
    Object diagValue = MDC.get(LoggerConstants.IS_ANALYZER_NUMBER);
    if (valueToMatch.equals(diagValue)) { // Some condition to check test number
        forcedLog(FQCN, Level.TRACE, message, null);
        return;
    }
    if (repository.isDisabled(Level.TRACE_INT))
        return;
    if (Level.TRACE.isGreaterOrEqual(this.getEffectiveLevel()))
        forcedLog(FQCN, Level.TRACE, message, null);
}

但是现在我已经转移到了log4j2,我不想再次写这个包装器了。是否有log4j2为此提供的内置功能?

1 个答案:

答案 0 :(得分:1)

这可以通过过滤器完成。将记录器添加到记录所需消息的配置中,然后为要记录的每个用户添加KeyValuePair {。}}。

然后将用户ID放在代码中的ThreadContextMapFilter中。