2015-10-20 63 views
0

這是我log4j2.xml單/修改log4j2的過濾器編程

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="warn" name="MyAppx" packages=""> 
<Appenders> 
    <RollingFile name="Application" fileName="/var/log/flex/flextask-websocket.log" filePattern="/var/log/flex/archive/flextask-websocket-%d{yyy-MM-dd}.log.gz"> 
     <Filters> 
       <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/> 
      </Filters> 
      <PatternLayout> 
       <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} websocket %-10level %class{36} %L %M - %msg%xEx%n</Pattern> 
      </PatternLayout> 
      <Policies> 
       <TimeBasedTriggeringPolicy /> 
      </Policies> 
    </RollingFile> 
</Appenders> 
<Loggers> 
    <Root level="trace"> 
     <AppenderRef ref="Application" /> 
    </Root> 
</Loggers> 

現在我想修改過濾器編程

到目前爲止我的代碼是

LoggerContext ctx = (LoggerContext)  LogManager.getContext(false);   
Configuration config = ctx.getConfiguration(); 
LoggerConfig loggerConfig = config.getLoggerConfig(LogManager.ROOT_LOGGER_NAME); 

根據我懷疑要做的xml文件的結構

loggerConfig.getAppenders().get("Application").getFilters() 

getFilters()方法不可用

我唯一能做

loggerConfig.getFilter() 

它返回單個濾波器。 但是我怎樣才能訪問所有的過濾器?過濾器和appender之間的關係在哪裏?

我的目標是在運行時只過濾特定的日誌級別。

所以當我說例如。 setFilter("Level1;Level2")

我想刪除allFilters和過濾僅適用於Level1和Level2

+0

嗨,你找到了解決方案嗎?我正在處理類似的任務,我需要列出appender的過濾器 – zaratustra

回答

0

Techniically的Log4j僅支持單個過濾器。要允許多個過濾器,過濾器將是一個包含其他過濾器的CompositeFilter。如果只有一個過濾器,只需指定沒有過濾器元素的過濾器。