[英]Changing log level for a keyword in log4j2
我正在嘗試以編程方式更改給定關鍵字的日志級別。 例如,如果我將日志級別設置為 OFF 但想要查看包含“database”關鍵字的日志,我該怎么做? 有沒有辦法通過java做到這一點?
@fatCop 的回答大部分是正確的。 您可以從配置為的 log4j2.xml 開始
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="AppName" packages="">
<RegexFilter regex="*database*" onMatch="DENY" onMismatch="DENY"/>
<Appenders>
<RollingFile name="RollingFile" fileName="logs/app.log"
filePattern="logs/app-%d{MM-dd-yyyy}.log.gz">
<PatternLayout>
<pattern>%d %p %c{1.} [%t] %m%n</pattern>
</PatternLayout>
<TimeBasedTriggeringPolicy />
</RollingFile>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</Configuration>
因為這是使用全局過濾器,所以不會記錄任何內容。 當您准備好啟用日志記錄時,請執行
final LoggerContext loggerContext = LoggerContext.getContext(false);
final Configuration config = loggerContext.getConfiguration();
Filter filter = RegexFilter.createFilter("database", null, false, Result.ACCEPT, RESULT.DENY);
config.setFilter(filter);
當您想要禁用它時,請用一個新的過濾器替換過濾器,該過濾器在匹配時設置回 DENY。
請注意,根記錄器上的日志記錄級別無關緊要,因為過濾器僅接受或拒絕事件。
根據Log4j 過濾器手冊,您可以使用RegexFilter
。 參考手冊的片段,您的配置可以是這樣的:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="AppName" packages="">
<Appenders>
<RollingFile name="RollingFile" fileName="logs/app.log"
filePattern="logs/app-%d{MM-dd-yyyy}.log.gz">
<RegexFilter regex="*database*" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout>
<pattern>%d %p %c{1.} [%t] %m%n</pattern>
</PatternLayout>
<TimeBasedTriggeringPolicy />
</RollingFile>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</Configuration>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.