2016-08-18 129 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