Это мой 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
Привет, вы нашли решение для этого? Я работаю над подобной задачей, и мне нужно перечислить фильтры приложения – zaratustra