LOG4J2可以通过使用MDC密钥作为路由过滤器将某些日志消息路由到指定文件?

问题描述 投票:0回答:1
我们有一个连接到多个服务的Java应用程序,例如电子邮件,数据库等。我们设置的密钥。

例如:

我从数据库中收到一条消息,上述消息也应在db.log.
    中。
  • 我收到一封电子邮件,我应该将其路由到电子邮件服务器,并且应该进入电子邮件。
  • 我怎么能实现这一目标?仅通过设置MDC键和适当的log4j2.xml config?
  • [...]

<Property name="newPattern">%d %-5p %X{log-route} [%t]</Property>

[...]

<Routing name="RoutingAppender">
   <Routes pattern="${ctx:log-route}">
        
        <Route key="EMAIL">
          <RollingRandomAccessFile
              name="EMAILRollingFile"
              fileName="log/email/email.log"
              filePattern="log/email/email.log.%i">
            <PatternLayout>
              <Pattern>${newPattern}</Pattern>
            </PatternLayout>
            <Policies>
              <OnStartupTriggeringPolicy />
              <SizeBasedTriggeringPolicy size="50 MB"/>
            </Policies>
            <property name="createOnDemand">true</property>
            <DefaultRolloverStrategy fileIndex="min" max="100"/>
          </RollingRandomAccessFile>
        </Route>

    </Routes>
</Routing>

在java我做

MDC.put("log-route","EMAIL");

我可以看到正确的日志消息,但全部都在默认文件中。其他文件甚至不会创建。

	

使用自己的logger appender

使用差异类

java logging log4j log4j2
1个回答
0
投票
DBAppender

    COM.EXAMPLE.Mail -
  • MailAppender
    
    
  • <?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <!-- Mail Logger Appender --> <RollingFile name="MailAppender" fileName="log/email/email.log" filePattern="logs/mail-%d{yyyy-MM-dd}.log.gz"> <PatternLayout> <Pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %c{1} - %msg%n</Pattern> </PatternLayout> <Policies> <TimeBasedTriggeringPolicy /> </Policies> </RollingFile> <!-- DB Logger Appender --> <RollingFile name="DBAppender" fileName="logs/db/db.log" filePattern="logs/db-%d{yyyy-MM-dd}.log.gz"> <PatternLayout> <Pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %c{1} - %msg%n</Pattern> </PatternLayout> <Policies> <TimeBasedTriggeringPolicy /> </Policies> </RollingFile> </Appenders> <Loggers> <!-- Mail Logger --> <Logger name="com.example.Mail" level="info" additivity="false"> <AppenderRef ref="MailAppender"/> </Logger> <!-- DB Logger --> <Logger name="com.example.DB" level="info" additivity="false"> <AppenderRef ref="DBAppender"/> </Logger> <!-- Root Logger --> <Root level="error"> <AppenderRef ref="MailAppender"/> <AppenderRef ref="DBAppender"/> </Root> </Loggers> </Configuration>
        
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.