【问题标题】:How to write different logs in different files with log4j2 (MDC in xml)?如何使用 log4j2(xml 中的 MDC)在不同的文件中写入不同的日志?
【发布时间】:2013-07-24 07:36:45
【问题描述】:

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

<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 密钥。如何使用 xml 中的 MDC 密钥来配置 RollingFileAppender?

【问题讨论】:

    标签: java logging configuration log4j2 mdc


    【解决方案1】:

    看看 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>
    

    【讨论】:

    • 非常感谢。但是为时已晚xD我已经自己找到了这个解决方案。无论如何,谢谢!)
    • @Remko 如果上下文没有所需的密钥,有没有办法打印日志
    • 好像.. logging.apache.org/log4j/log4j-2.1/faq.html 回答了我的问题
    • @ruslanys - 原始问题的解决方案是什么?我正在尝试在 log4j2 框架中使用 MDC 打印事务 id (tid),但它没有在日志中打印 tid。难道我做错了什么?下面是我的 log4j2.xml 文件的 sn-p。
    • 这个解决方案似乎不起作用。它给了我一个错误:- Unable to locate appender "RollingFile" for logger config
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-22
    • 2013-11-27
    • 1970-01-01
    • 1970-01-01
    • 2018-03-24
    • 2018-06-28
    相关资源
    最近更新 更多