java - 如何使用log4j2(xml中的MDC)将不同的日志写入不同的文件?

标签 java logging configuration log4j2 mdc

现在我使用这样的结构: 追加器:

<RollingFile name="user.log" append="true" fileName="users/%MDC{USERNAME}.txt"
                 filePattern="users/archive/%MDC{USERNAME}-%d{MM-dd-yyyy}-%i.txt.gz">
        <PatternLayout pattern="%-5p %d{MMMM-dd HH:mm:ss} %X: %c - %m%n"/>
        <Policies>
            <TimeBasedTriggeringPolicy/>
            <SizeBasedTriggeringPolicy size="50 MB"/>
        </Policies>
    </RollingFile>

记录器:

    <appender-ref ref="user.log">
        <ThreadContextMapFilter onMatch="ACCEPT" onMismatch="DENY" operator="or">
            <KeyValuePair key="USERNAME" value="%X{USERNAME}"/>
            <KeyValuePair key="IP" value="%X{IP}"/>
        </ThreadContextMapFilter>
    </appender-ref>

但它不适用于 MDC key 。我如何使用 xml 中的 MDC key 来配置 RollingFileAppender?

最佳答案

看看 RoutingAppender。也许这可以帮助您入门:

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="DEBUG" name="MyApp" packages="">
  <appenders>
    <Routing name="Routing">
      <Routes pattern="$${ctx:USERNAME}">
        <Route>
          <RollingFile name="user.log" append="true" fileName="users/${ctx:USERNAME}.txt"
             filePattern="users/archive/${ctx:USERNAME}-%d{MM-dd-yyyy}-%i.txt.gz">
            <PatternLayout>
              <pattern>%d{ISO8601} [%t] %p %c %L - %m%n</pattern>
            </PatternLayout>
            <Policies>
              <TimeBasedTriggeringPolicy/>
              <SizeBasedTriggeringPolicy size="50 MB"/>
            </Policies>
          </RollingFile>
        </Route>
      </Routes>
    </Routing>
  </appenders>

  <loggers>
    <root level="TRACE">
      <appender-ref ref="Routing" level="DEBUG" />
    </root>
  </loggers>
</configuration>

关于java - 如何使用log4j2(xml中的MDC)将不同的日志写入不同的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17827923/

相关文章:

python - 在 Python 中使用 RotatingFileHandler 按日期轮换日志

javascript - 有没有办法用一个函数包装所有的 JavaScript 方法?

ubuntu - 使用 nmcli 从静态切换到 DHCP

c# - Net Core - 将配置应用于框架类

java - 如何在 Log4J 2 配置的查找中使用多重替换?是否可以?

java - 在java中创建字典?

java - 如何打印整数00而不是java打印0

java - 高 CPU,可能是由于上下文切换?

java - 垃圾收集的哪一部分需要 Sys 时间?

git - 将最有用的提交消息提取到变更日志的策略