打印日志你真的会吗?

文章目录

      • 概念
      • 快速上手
      • 1.新建项目,引入依赖:
      • 2.新增配置:
      • 3.打印测试

作为一个猿,大家多多少少应该都改过线上的bug吧,这种本地复现不了,线上又有的bug你们都是怎么定位的呢?我想日志可能是首选办法了吧,那么你们的日志打印都有什么规范呢?你还是用的log4j吗?我们一起来了解下logback吧

概念

Logback是由log4j创始人设计的一个开源日志组件,可以说是log4j的升级版也不为过!

logback 官网:官网
logback 中文网:中文网

快速上手

我们知道,我们平时打印的日志级别一般为info 和error 较多,那么我们为了标明不同的日志级别,我们需要借助一个彩色日志插件:Grep Console

可以去对应的插件plugins处下载,但是我这边idea marketPlace中就是没有,蛋疼!
还是去idea官网下吧,插件下载地址

下载后,我们解压到idea 的安装目录下的plugin中然后重启idea即可,记得查看自己的idea 版本下载对应的插件版本哈!
打印日志你真的会吗?_第1张图片

1.新建项目,引入依赖:

选择lombok 和 Springweb 依赖

因为后面我们需要用Slf4j来打印日志,所以需要添加Lombok依赖哈!
因为后面打印日志的配置指定了对应的环境,所以我们需要在配置中也指定对应的环境,否则无法打印

spring.profiles.active=dev

2.新增配置:

在resource下新增配置文件 logback.xml 和log文件夹
注:log.path 对应的value值即为 log文件夹的位置,记得不要写错!
配置如下:



<configuration  scan="true" scanPeriod="10 seconds">
    
    
    
    

    <contextName>logbackcontextName>
    
    
    <property name="log.path" value="/Users/echo/Documents/sCloud/spring-study/src/main/resources/log" />

    
    
    
    
    
    
    
    <property name="CONSOLE_LOG_PATTERN"
              value="%yellow(%date{yyyy-MM-dd HH:mm:ss}) |%highlight(%-5level) |%blue(%thread) |%blue(%file:%line) |%green(%logger) |%cyan(%msg%n)"/>


    
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        
        
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFOlevel>
        filter>
        <encoder>
            <Pattern>${CONSOLE_LOG_PATTERN}Pattern>
            
            <charset>UTF-8charset>
        encoder>
    appender>


    

    
    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        
        <file>${log.path}/log_info.logfile>
        
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%npattern>
            <charset>UTF-8charset>
        encoder>
        
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            
            <fileNamePattern>${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.logfileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MBmaxFileSize>
            timeBasedFileNamingAndTriggeringPolicy>
            
            <maxHistory>15maxHistory>
        rollingPolicy>
        
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFOlevel>
            <onMatch>ACCEPTonMatch>
            <onMismatch>DENYonMismatch>
        filter>
    appender>


    
    <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        
        <file>${log.path}/log_warn.logfile>
        
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%npattern>
            <charset>UTF-8charset> 
        encoder>
        
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.logfileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MBmaxFileSize>
            timeBasedFileNamingAndTriggeringPolicy>
            
            <maxHistory>15maxHistory>
        rollingPolicy>
        
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>warnlevel>
            <onMatch>ACCEPTonMatch>
            <onMismatch>DENYonMismatch>
        filter>
    appender>


    
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        
        <file>${log.path}/log_error.logfile>
        
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%npattern>
            <charset>UTF-8charset> 
        encoder>
        
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/error/log-error-%d{yyyy-MM-dd}.%i.logfileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MBmaxFileSize>
            timeBasedFileNamingAndTriggeringPolicy>
            
            <maxHistory>15maxHistory>
        rollingPolicy>
        
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERRORlevel>
            <onMatch>ACCEPTonMatch>
            <onMismatch>DENYonMismatch>
        filter>
    appender>

    
    
    
    
    <springProfile name="dev">
        
        <logger name="com.example" level="INFO" />
        
        <root level="INFO">
            <appender-ref ref="CONSOLE" />
            <appender-ref ref="INFO_FILE" />
            <appender-ref ref="WARN_FILE" />
            <appender-ref ref="ERROR_FILE" />
        root>
    springProfile>


    
    
    <springProfile name="pro">

        
        <logger name="com.example" level="WARN" />

        <root level="INFO">
            <appender-ref ref="ERROR_FILE" />
            <appender-ref ref="WARN_FILE" />
        root>
    springProfile>
configuration>

注⚠️:这些配置基本都不会变动的,拿过去用即可;如果想去了解原理,也可以去官网了解(意义不大)!

3.打印测试

测试类如下:

package com.example.demo;

import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
@Slf4j
class DemoApplicationTests {

    @Test
    void contextLoads() {
        log.info("测试打印 info信息");
        log.error("测试打印 error信息");
        log.warn("测试打印 warn信息");
    }
}

启动测试查看控制台输入如下:
打印日志你真的会吗?_第2张图片
查看log文件夹下产生文件如下:
打印日志你真的会吗?_第3张图片

至此,我们已经完成了 日志的统一处理,有木有很简单呢?赶快动手试一下吧,这么好看的日志输出,怎能不尝试一下!

你可能感兴趣的:(后端)