簡體   English   中英

更改 log4j2 中關鍵字的日志級別

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM