例如:
我从数据库中收到一条消息,上述消息也应在db.log.
<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
使用差异类
DBAppender
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>