2015-10-19 20 views
2

在生產環境中,我只記錄WARN和ERROR日誌消息。Log4j爲生產中的特定用戶記錄自定義級別

我需要實現一種機制,記錄(a)特定用戶的所有日誌級別。

我正在處理來自外部的請求(不一定是servlet),從一開始我就可以檢索用戶名,所以我可以將用戶名放在MDC中,並且它會轉到日誌消息。

但是,我需要檢查用戶名是否在預定義的用戶列表中(此列表實際上可以在運行時動態更新),如果用戶名稱在此列表中,那麼我需要啓用(僅限此用戶)記錄來自fx。 TRACE級別(意味着所有TRACE,DEBUG,INFO,WARN和ERROR)。

這可能嗎?

更新#1:我們正在使用Spring啓動的Log4j

更新#2:Log4j的配置

LOG_PATTERN=%d{yyyy-MM-dd HH:mm:ss.SSS} %X{context} ${PID} %5p %-10X{username} [%t] - %c{1}(%L): %m%n 

log4j.rootCategory=INFO, amqp 

log4j.category.org.springframework=WARN 
log4j.category.com.acme=DEBUG 

log4j.appender.file=org.apache.log4j.RollingFileAppender 
log4j.appender.file.File=logs/app.log 
log4j.appender.file.MaxFileSize=100MB 
log4j.appender.file.MaxBackupIndex=10 
log4j.appender.file.layout=org.apache.log4j.PatternLayout 
log4j.appender.file.layout.ConversionPattern=${LOG_PATTERN} 

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender 
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout 
log4j.appender.CONSOLE.layout.ConversionPattern=${LOG_PATTERN} 

log4j.appender.amqp=org.springframework.amqp.rabbit.log4j.AmqpAppender 
log4j.appender.amqp.host=localhost 
log4j.appender.amqp.port=5671 
log4j.appender.amqp.username=username 
log4j.appender.amqp.password=password 
log4j.appender.amqp.virtualHost=vhost 

log4j.appender.amqp.exchangeName=logging.pub 
log4j.appender.amqp.exchangeType=topic 
log4j.appender.amqp.routingKeyPattern=%c.%p 
log4j.appender.amqp.declareExchange=false 
log4j.appender.amqp.durable=true 
log4j.appender.amqp.autoDelete=false 
log4j.appender.amqp.contentType=text/plain 
log4j.appender.amqp.generateId=false 
log4j.appender.amqp.senderPoolSize=2 
log4j.appender.amqp.maxSenderRetries=30 
log4j.appender.amqp.layout=org.apache.log4j.PatternLayout 
log4j.appender.amqp.layout.ConversionPattern=${LOG_PATTERN} 
+2

SLF4J只是外牆。什麼是您的日誌記錄實施/橋樑在使用中? Commons Logging? Log4j的?的logback?我想你應該能夠爲此至少在logback和log4j中定義一些過濾器。 – Fildor

+0

對不起....我們正在使用Spring Boot Log4j(我也更新了這個問題) – KimHansen

+0

用戶特定的完整日誌是否會分離appender?像每個用戶進入不同的文件或類似的東西?我們可以看到您當前的日誌配置嗎? – Fildor

回答

0

所有的澄清之後,簡單的答案是:沒有。

由log4j的trace/debug/.../error方法完成的第一個檢查是記錄器級別。如果日誌事件級別低於日誌記錄器配置的級別 - 沒有其他操作完成,則日誌記錄方法返回。消息格式化,處理診斷上下文,觸發appender - 只要有任何要處理的內容,都會在稍後進行。在log4j 1中,它不能通過配置進行更改。

在log4j 2中我們有全局過濾器,它們在記錄器級別測試之前被檢查 - 雖然我不知道它們是否適合這種任務,但我肯定會開始在那裏尋找。如果您可以升級到log4j 2,請檢查它們。