2015-10-20 33 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。如果只有一个过滤器,只需指定没有过滤器元素的过滤器。