2016-08-18 130 views
1

我们有一个web服务器和多个用户登录到它。我们通常把日志级别设置为ERROR或INFO级别。但有时候,为了调试的目的,我们需要看日志。在运行时有one way来设置它,但是这个过程在流量负载情况下不太好。重要日志将被错过,并且我们也不知道我们需要多少时间来保持这种状态。我已经在log4j v1.2中编写了一个包装器,它只是忽略了用户标识属于某个TestUsersList的级别检查。因此,它仅打开特定用户[一个线程]的所有日志。一个片段是 -Log4j2,在运行时为特定线程设置日志级别

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

这可以用过滤器来完成。将记录器添加到配置中,记录所需的所有消息,然后为要记录的每个用户添加一个ThreadContextMapFilter,该记录具有KeyValuePair

然后将代码中的用户ID放入Thread Context