我们有一个网络服务器,有多个用户登录。我们通常将日志级别设置为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为此提供的内置功能?
答案 0 :(得分:1)
这可以通过过滤器完成。将记录器添加到记录所需消息的配置中,然后为要记录的每个用户添加KeyValuePair
{。}}。
然后将用户ID放在代码中的ThreadContextMapFilter中。