• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

使用logback自定义deviceId,并根据deviceId生成各自的日志文件

互联网 diligentman 2周前 (04-09) 10次浏览

1.层级目录截图

使用logback自定义deviceId,并根据deviceId生成各自的日志文件

2.pom依赖,注意–idea下载lombok插件

<!--lombok -->
<dependency>
   <groupId>org.projectlombok</groupId>
   <artifactId>lombok</artifactId>
   <version>1.16.16</version>
</dependency>
<!--sl4j -->
<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-api</artifactId>
   <version>1.7.25</version>
</dependency>

3.logback文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="true" scanPeriod="1 seconds">
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %level %logger{35} - %msg%n</pattern>
        </encoder>
    </appender>
    <appender name="siftInfo" class="ch.qos.logback.classic.sift.SiftingAppender">
        <!--discriminator鉴别器,设置运行时动态属性,siftingAppender根据这个属性来输出日志到不同文件 -->
        <discriminator>
            <key>deviceId</key>
            <defaultValue>unknown</defaultValue>
        </discriminator>
        <sift>
            <!--具体的写日志appender,每一个deviceId创建一个文件-->
            <appender name="FILE-${deviceId}" class="ch.qos.logback.core.rolling.RollingFileAppender">
                <append>true</append>
                <encoder charset="UTF-8">
                    <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %-5level %logger{35} - %msg%n</pattern>
                </encoder>
                <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                    <!--定义文件滚动时的文件名的格式-->
<!--                    <fileNamePattern>./logs/%d{yyyyMMdd}/deviceId-${deviceId}-%i.log</fileNamePattern>-->
                    <fileNamePattern>D:/mylogs/%d{yyyyMMdd}/deviceId-${deviceId}-%i.log</fileNamePattern>
                    <maxFileSize>500MB</maxFileSize>
                    <maxHistory>60</maxHistory>
                    <totalSizeCap>20GB</totalSizeCap>
                </rollingPolicy>
                <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                    <level>INFO</level>
                </filter>
            </appender>
        </sift>
    </appender>
    <root level="info">
        <appender-ref ref="console"/>
        <appender-ref ref="siftInfo"/>
    </root>
</configuration>

4.测试类

import org.apache.log4j.MDC;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class TestLogback {
    public static final Logger logger = LoggerFactory.getLogger(TestLogback.class);

    public void test1(){
        MDC.put("deviceId", "deviceId3");
        logger.debug("deviceId3 connected");


        MDC.put("deviceId", "deviceId4");
        logger.error("deviceId4   ---connected");

        MDC.put("deviceId", "deviceId5");
        logger.info("deviceId5   ---connected");
    }
    public void test2(){
        MDC.put("deviceId", "deviceId2");
        logger.trace("deviceId2 connected");
    }

    public static void main(String[] args) {
        final TestLogback testLogback = new TestLogback();
        testLogback.test1();
        testLogback.test2();
    }
}

5.效果截图

使用logback自定义deviceId,并根据deviceId生成各自的日志文件

 

使用logback自定义deviceId,并根据deviceId生成各自的日志文件

注意点:用log打印日志前需要拿到该设备的唯一标识。重点在于 :

MDC.put("deviceId", "deviceId3");   //根据deviceId3 生成日志文件,有则追加数据,没有则创建该文件。   deviceId3就是打印的唯一标识
logger.debug("deviceId3 connected");     // MDC.put("deviceId", "deviceId3"); 为第一步,  logger.debug("deviceId3 connected"); 打印日志为第二bu

 

 

 

 

 

展开阅读全文

slf4jlomboklogback

© 著作权归作者所有

举报

打赏

0


0 收藏

微信
QQ
微博

分享

作者的其它热门文章

WebSocket区分不同客户端两种方法(HttpSession和@PathParam)(没测,但思路应该是对的)
MQ 消息队列
idea引入外部jar包,An attempt was made to call a method that does not exist
IDEA中pom文件及Java文件变成了橘色


喜欢 (0)