2015-10-20 2 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

Привет, вы нашли решение для этого? Я работаю над подобной задачей, и мне нужно перечислить фильтры приложения – zaratustra

ответ

0

Techniically Log4j поддерживает только один фильтр. Чтобы разрешить несколько фильтров, фильтр будет представлять собой CompositeFilter, который содержит другие фильтры. Если у вас есть только один фильтр, просто укажите это без элемента фильтров.

Смежные вопросы