springboot项目中logback的使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/nrsc272420199/article/details/86632411

1.不借助lombok的情况下

package com.nrsc.logger.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class LoggerTest {

    @RequestMapping("/logger")
    public String demo() {

        Logger logger = LoggerFactory.getLogger(LoggerTest.class);

        String username = "yoyo";
        String password = "123456";

        //默认情况下debug日志不会被打印出来,可以参看application-test.yml中的配置,来更改日志级别为debug使其显示
        logger.debug("debug");

        //默认日志级别
        logger.info("info");

        //项目里经常会这样用感觉挺好用的
        logger.error("【用户信息】username={},password={}", username, password);
        return "hello world";
    }
}

2.借助lombok @Slf4j 注解

package com.nrsc.logger.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@Slf4j
@RestController
public class LoggerTest2 {
    @RequestMapping("/logger2")
    public String demo() {
        //使用lombok的@Slf4j注解,下面这句话就不需要了,默认生成了一个Logger实例,名字为log
        // Logger logger = LoggerFactory.getLogger(LoggerTest2.class);

        String username = "yoyo";
        String password = "123456";

        //可以直接使用log打日志
        log.debug("debug");

        //默认日志级别
        log.info("info");

        //项目里经常会这样用感觉挺好用的
        log.error("【用户信息】username={},password={}", username, password);
        return "hello world";
    }
}

3.在yml文件里简单配置日志相关内容–真实项目中应该不会用

logging:
  pattern:
    console: "%d - %msg%n"
  #path: /var/nrsc/log
  file: /var/nrsc/log/logger.log
  level:
    com.nrsc.logger.controller.LoggerTest: debug
    #上面如果写root:debug就是将全局默认日志级别改为debug

4.logback-spring.xml里进行复杂配置–info和error分开

<?xml version="1.0" encoding="UTF-8"?>

<configuration scan="true" scanPeriod="60 seconds" debug="false">

    <contextName>logback</contextName>

    <springProperty scope="context" name="appName" source="management.metrics.tags.appName"
                    defaultValue="appName"/>
    <!--定义日志文件的存储地址-->
    <property name="log.path" value="/var/nrsc"/>

    <!--设置控制台日志输出格式-->
    <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] ${appName} %-5level %logger:%L - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!--设置info日志的输出-->
    <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <append>true</append>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!--日志的级别设为ERROR-->
            <level>ERROR</level>
            <!--如果是出现了ERROR直接拒绝不管,走下面的日志处理即:fileErrorLog-->
            <onMatch>DENY</onMatch>
            <!--否则的话,会走此日志输出,按照日志级别来说ERROR下面还有WARN,INFO,DEBUG和TRACE,
            但是我们在最下面设置了默认日志级别为INFO,因此在该文件里只会输出INFO和WARN日志-->
            <onMismatch>ACCEPT</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/%d{yyyy, aux}/%d{MM, aux}/%d{dd, aux}/info/info.%d{yyyy-MM-dd-HH}.log.gz
            </fileNamePattern>
            <maxHistory>2160</maxHistory> <!-- 90 day, 24 hours -->
            <totalSizeCap>70GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] ${appName} %-5level %logger %L - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!--设置error日志-->
    <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <append>true</append>
        <!--注意:error日志的过滤类用ThresholdFilter-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/%d{yyyy, aux}/%d{MM, aux}/%d{dd, aux}/error/error.%d{yyyy-MM-dd-HH}.log.gz
            </fileNamePattern>
            <!--日志文件保留天数-->
            <maxHistory>2160</maxHistory> <!-- 90 day, 24 hours -->
            <!--最大不能超过30GB -->
            <totalSizeCap>30GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <!--日志输出格式-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] ${appName} %-5level %logger %L - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!--将上面的配置应用于整个项目,且默认日志级别设置为INFO-->
    <root level="INFO">
        <appender-ref ref="consoleLog"/>
        <appender-ref ref="fileInfoLog"/>
        <appender-ref ref="fileErrorLog"/>
    </root>
</configuration>

5.做了个小demo — 真实项目中应该可以直接使用

demo地址

猜你喜欢

转载自blog.csdn.net/nrsc272420199/article/details/86632411