gpt4 book ai didi

java - 以编程方式列出/修改 log4j2 的过滤器

转载 作者:太空宇宙 更新时间:2023-11-04 13:19:28 24 4
gpt4 key购买 nike

这是我的log4j2.xml

<?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()

返回单个过滤器。但我怎样才能访问所有过滤器呢?那么filter和appender之间的关系在哪里呢?

我的目标是在运行时仅过滤特定的日志级别。

所以当我说例如。 setFilter("Level1;Level2")

我想删除allFilters并仅针对Level1和Level2进行过滤

最佳答案

从技术上讲,Log4j 仅支持单个过滤器。为了允许多个过滤器,过滤器将是包含其他过滤器的 CompositeFilter。如果您只有一个过滤器,只需指定不带过滤器元素的过滤器即可。

关于java - 以编程方式列出/修改 log4j2 的过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33232981/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com