使用 MDC 线程变量
使用 MDC 线程变量,可以将时间作为参数传递 logback。但是通过默认的 discriminator 目前暂且只会定义一个自定义变量。
public void SendUserObject(AwsLog awsLog) {
if (awsLog.uid <= 0)
return;
String content = String.format("%s_%s_%s_%s\n%s", awsLog.code, awsLog.uid, awsLog.logType, awsLog.date, JSON.toJSONString(awsLog));
MDC.put("AwsLogType", awsLog.logType.toString());
MDC.put("test", DateUtils.getPatternHH_Without_DaylightSaving());
itemLoggerService.log(content);
if (CurrencyCode.JPY.toString().equals(awsLog.code) && awsLog.logType == AwsLogType.Buy) {
jpyItemLoggerService.log(content);
}
MDC.remove("AwsLogType");
// MDC.remove("curHour");
}
<discriminator>
<key>AwsLogType</key>
<defaultValue>none</defaultValue>
</discriminator>
用时区设置
- 时区的设置:
- 代码配置 GMT-08:00 :
<?xml version="1.0" encoding="UTF-8"?>
<!-- 从高到地低 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE 、 ALL -->
<!-- 日志输出规则 根据当前ROOT 级别,日志输出时,级别高于root默认的级别时 会输出 -->
<!-- 以下 每个配置的 filter 是过滤掉输出文件里面,会出现高级别文件,依然出现低级别的日志信息,通过filter 过滤只记录本级别的日志 -->
<!-- 属性描述 scan:性设置为true时,配置文件如果发生改变,将会被重新加载, 默认值为true scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。
当scan为true时,此属性生效。默认的时间间隔为1分钟。 debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="10 seconds" debug="false">
<!-- 定义日志文件 输入位置 -->
<property name="log_dir" value="logs" />
<!-- 日志最大的历史 30天 -->
<property name="maxHistory" value="8640" />
...
<property name="pay_log_dir" value="paylogs" />
<appender name="PAY_HISTORY" class="ch.qos.logback.classic.sift.SiftingAppender">
<!-- discriminator 的默认实现类 ch.qos.logback.classic.sift.MDCBasedDiscriminator -->
<discriminator>
<key>AwsLogType</key>
<defaultValue>none</defaultValue>
</discriminator>
<sift>
<appender name="FILE-${AwsLogType}" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- discriminator 的默认实现类 ch.qos.logback.classic.sift.MDCBasedDiscriminator -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${pay_log_dir}/%d{yyyy-MM-dd,aux}/%d{HH,GMT-08:00}/%d{yyyyMMdd,aux}_%d{HH,GMT-08:00,aux}_${AwsLogType}.log</fileNamePattern>
<maxHistory>8640</maxHistory>
</rollingPolicy>
<encoder>
<charset>UTF-8</charset>
<pattern>%msg%n</pattern>
</encoder>
</appender>
</sift>
</appender>
<appender name="PAY_HISTORY_JPY" class="ch.qos.logback.classic.sift.SiftingAppender">
<discriminator>
<key>AwsLogType</key>
<defaultValue>none</defaultValue>
</discriminator>
<sift>
<appender name="FILE-${AwsLogType}" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${pay_log_dir}/%d{yyyy-MM-dd,GMT-08:00,aux}/%d{HH,GMT-08:00}/JPY_%d{yyyyMMdd,GMT-08:00,aux}_%d{HH,GMT-08:00,aux}_${AwsLogType}.log</fileNamePattern>
<maxHistory>8640</maxHistory>
</rollingPolicy>
<encoder>
<charset>UTF-8</charset>
<pattern>%msg%n</pattern>
</encoder>
</appender>
</sift>
</appender>
...
</configuration>
如果考虑夏令时:
%d{HH:mm:ss.SSS, GMT-08:00, America/Los_Angeles}
附录
[1] MDC
[2] SimpleDateFormat 简介
[3] Chapter 6: Layouts
[4] Dates ISO_8601
[5] AkkaSourceDiscriminator.java