在工作场景中可能遇到这种需求:根据不同的事件类型和时间生成不同的文件
比如我遇到的这个需求
正常MTA 生成log文件。一个事件每小时一个文件,格式:mta-事件类别_日期_小时.log。目录可以按日期划分,例如: /mtalog/2019-05-06/mta-GameCreateRoleEvent_2019-05-06_08.log。如:
mta-GameCreateRoleEvent_2019-05-06_08.log、
mta-GameCreateRoleEvent_2019-05-06_14.log、
mta-GameCreateRoleEvent_2019-05-06_22.log。等
如果让我们自己写代码生成文件。那就会很麻烦
这时候logback日志框架可以很轻松的帮我们解决这个问题
首先导入依赖
<dependencies>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-access</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
</dependencies>
第二步,编写logback.xml配置文件
<appender name="MTAFile" class="ch.qos.logback.classic.sift.SiftingAppender">
<discriminator>
<key>event_name</key>
<defaultValue>unknown</defaultValue>
</discriminator>
<sift>
<appender name="File-${event_name}" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志输出位置 可相对、和绝对路径 -->
<fileNamePattern>/mtalog/%d{yyyy-MM-dd}/mta-${event_name}_%d{yyyy-MM-dd_HH}.log</fileNamePattern>
</rollingPolicy>
<encoder>
<!--输出格式化-->
<pattern>%msg%n</pattern>
</encoder>
</appender>
</sift>
</appender>
<!--记得定义logger哦-->
<logger name="MTAFile" level="INFO" additivity="false">
<appender-ref ref="MTAFile"/>
</logger>
第三步,获取logger对象
private static final Logger mtaLog= LoggerFactory.getLogger("MTAFile");
第四步,使用MDC给xml配置文件定义的event_name赋值
public class Test {
private static final Logger mtaLog= LoggerFactory.getLogger("MTAFile");
public static void main(String[] args) {
MDC.put("event_name", "GameCreateRoleEvent");
mtaLog.info("111");
MDC.put("event_name", "GameLevelChangedEvent");
mtaLog.info("222");
MDC.put("event_name", "GamePlayerBattleEvent");
mtaLog.info("333");
}
}