2015-04-28 17 views
0

我在我的應用程序中使用log4j。有沒有辦法將log4j配置爲忽略具有正則表達式(REGEX)的子包?

如果我想啓用日誌記錄爲一個包,我可以簡單的做下面的[我的log4j.properties文件]: log4j.logger.com.myorg.somepackage= DEBUG 這將導致log4j的記錄從「com.myorg.somepackage」的任何消息,我根記錄器。

我的問題是,如果我使用Maven遮罩等插件,如何停止從包中記錄日誌?

例如,假設您已將「com.myorg.somepackage」包(通過maven遮罩插件)重定位到「com.someotherorg.dependency.com.myorg.somepackage」。

如果我想將級別設置爲警告,我知道我能做到以下: log4j.logger.com.someotherorg.dependency.com.myorg.somepackage= WARN

然而,在我的情況下,這個依賴陰影的多個項目,我不希望有: log4j.logger.com.someotherorg.dependency.com.myorg.somepackage= WARN log4j.logger.com.someotherorg1.dependency.com.myorg.somepackage= WARN log4j.logger.com.someotherorg2.dependency.com.myorg.somepackage= WARN ...等

所以,我怎麼能有log4j的忽略「com.myorg.somepackage」無論在哪裏,它位於包的名稱?是否有某種我不知道的REGEX?

我想做一些事情: log4j.logger.*.com.myorg.somepackage= WARN 但這不起作用。

回答

0

我找不到在log4j中這樣做的默認功能,但是log4j確實允許您創建自己的過濾器。

這裏是我做過什麼來解決它:

import org.apache.log4j.Level; import org.apache.log4j.spi.Filter; import org.apache.log4j.spi.LoggingEvent;

公共類CustomFilterer擴展器{

@Override 
public int decide(LoggingEvent event) { 
    if (!event.getLoggerName().contains("com.myorg.somepackage")) { 
     return Filter.NEUTRAL; 
    } else { 
     if (event.getLevel().isGreaterOrEqual(Level.WARN)) { 
      return Filter.NEUTRAL; 

     } else { 
      return Filter.DENY; 
     } 
    } 
} 

} `

相關問題