美文网首页
使用@Slf4j和logback-spring.xml搭建日志框

使用@Slf4j和logback-spring.xml搭建日志框

作者: 日落_3d9f | 来源:发表于2022-07-28 09:55 被阅读0次

    摘自:使用@Slf4j和logback-spring.xml搭建日志框架

    前言

    对于一名Java后端开发工程师,查询日志是经常做的事情。因此,如果能构建一个合适的日志[框架],就能让我们在查看日志排查错误的时候,能够很快地找出问题所在。

    配置logback.xml,可以让idea的控制台输出我们想要的信息,比如时间、线程、端口、pid等等,还能配置不同信息不同颜色输出在控制台上,方便我们查看日志。

    1、在yml配置文件中输入文件输出路径
    此配置是logback.xml读取yml配置文件中的路径,使得文件能够输出到我们想要的地方。在配置文件中配置是因为如果你使用Apollo这种可以热发布的配置中心,可以动态修改。如果你输出的地址不变,可以直接写在logback.xml中。

    log:
      path: ./logs/test-module/test-module-${server.port}
    

    ./表示当前模块的路径

    ${server.port}表示yml配置的模块端口

    2、引入依赖
    我一般使用的是@SLf4j作为日志输出。

    使用logback.xml,需要引入下面两个依赖。如果你使用的是springboot,那么springboot的starter会自带这两个依赖,不用再重复导入。

    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.11</version>
        <scope>test</scope>
    </dependency>
    
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
        <version>1.2.11</version>
    </dependency>
    

    3、在模块的resource目录下创建logback.xml
    此份logback.xml,配置了控制台的输出日志,写入文件的日志以及写入错误日志的配置。

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration debug="false">
    
        <!-- 彩色日志 -->
        <!-- 彩色日志依赖的渲染类 -->
        <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
        <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
        <!-- 彩色日志格式 {blue}表示前面的输出日志的颜色是蓝色 -->
        <property name="CONSOLE_LOG_PATTERN"
                  value=" ${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){blue} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
    
        <!-- 获取yml中的log地址 -->
        <springProperty scope="context" name="logPath" source="log.path"/>
    
        <!-- 控制台彩色日志输出 -->
        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>${CONSOLE_LOG_PATTERN}</pattern>
                <charset>utf8</charset>
            </encoder>
        </appender>
    
        <!--由文件大小与时间控制滚动-->
        <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <!--日志文件输出的文件名-->
                <FileNamePattern>${logPath}/%d{yyyy-MM-dd}/logs-%d{yyyy-MM-dd}-%i.log</FileNamePattern>
                <!--活动文件大小-->
                <maxFileSize>20MB</maxFileSize>
                <!--回滚的总文件大小 eg:totalSizeCap/MaxFileSize 即只保存2个文件-->
                <totalSizeCap>2GB</totalSizeCap>
                <cleanHistoryOnStart>true</cleanHistoryOnStart>
                <!--最大的日志保存数量-->
                <!--<param name="MaxBackupIndex" value="10"/>-->
                <!--日志文件保留天数-->
                <MaxHistory>30</MaxHistory>
            </rollingPolicy>
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <!--格式化输出:%d表示日期。%-5level:日志级别,从左显示5个字符宽度。%thread表示线程名,%c:表示日志所在类。%L:表示日志所在行数。 %msg:日志消息,%n是换行符-->
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%level] [%thread] [%c] %L - %msg%n</pattern>
                <charset>utf8</charset>
            </encoder>
        </appender>
    
        <!--异常日志-->
        <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>ERROR</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
            <!--由文件大小与时间控制滚动-->
            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <FileNamePattern>${logPath}/%d{yyyy-MM-dd}/errors-%d{yyyy-MM-dd}-%i.log</FileNamePattern>
                <maxFileSize>5MB</maxFileSize>
                <!--回滚的总文件大小 eg:totalSizeCap/MaxFileSize 即只保存2个文件-->
                <totalSizeCap>1GB</totalSizeCap>
                <cleanHistoryOnStart>true</cleanHistoryOnStart>
                <!--最大的日志保存数量-->
                <!--<param name="MaxBackupIndex" value="10"/>-->
                <!--日志文件保留天数-->
                <MaxHistory>30</MaxHistory>
            </rollingPolicy>
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%level] [%thread] [%c] %L - %msg%n</pattern>
                <charset>utf8</charset>
            </encoder>
        </appender>
    
            <!--
            logger 有两种级别,一种是 root,一种是普通的 logger,logger 是用来设置某一个包或者具体的某一个类的日志打印机级别,以及制定的 appender。 
            logger 有三个属性
            - name:用来指定此 logger 约束的某一个包或者具体的某一个类
            - level:用来设置打印机别,
            - addtivity:是否向上级 logger 传递打印信息。默认是 true
            每个 logger 都有对应的父级关系,它通过包名来决定父级关系,root 是最高级的父元素。
            -->
        <logger name="com.czf" level="INFO"/>
        <!-- 日志输出级别 -->
        <root level="INFO">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="FILE"/>
            <appender-ref ref="ERROR"/>
        </root>
    </configuration>
    

    注意:
    1、文件名需要为logback-spring.xml,如果是logback.xml的话,springboot会因为识别问题,会自动创建一个logPath_IS_UNDEFINED的文件夹。
    2、如果想在启动类中加上日志,注意需要加在run方法的后面,否则虽然会在控制台输出,但不会写入到日志文件中。

    public class PersonalCreditApplication {
        public static void main(String[] args) {
            SpringApplication.run(PersonalCreditApplication.class, args);
            log.info("项目启动");
        }
    
    

    至此,一个项目或模块的日志框架就搭建成功。

    相关文章

      网友评论

          本文标题:使用@Slf4j和logback-spring.xml搭建日志框

          本文链接:https://www.haomeiwen.com/subject/ekotwrtx.html