ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

使用logback的SiftingAppender和MDC自定义生成日志文件

2021-10-14 11:04:51  阅读:402  来源: 互联网

标签:log 自定义 MDC SiftingAppender 2019 mta logback event name


在工作场景中可能遇到这种需求:根据不同的事件类型和时间生成不同的文件
比如我遇到的这个需求

正常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");
    }
}

运行后发现在我们定义的目录下生成了三个文件

在这里插入图片描述

完全符合我们的需求

标签:log,自定义,MDC,SiftingAppender,2019,mta,logback,event,name
来源: https://blog.csdn.net/Young_Black/article/details/120759396

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有