springboot项目中logback的使用

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分开



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

    <contextName>logbackcontextName>

    <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>INFOlevel>
        filter>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] ${appName} %-5level %logger:%L - %msg%npattern>
            <charset>UTF-8charset>
        encoder>
    appender>

    
    <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <append>trueappend>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            
            <level>ERRORlevel>
            
            <onMatch>DENYonMatch>
            
            <onMismatch>ACCEPTonMismatch>
        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>2160maxHistory> 
            <totalSizeCap>70GBtotalSizeCap>
        rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] ${appName} %-5level %logger %L - %msg%npattern>
            <charset>UTF-8charset>
        encoder>
    appender>

    
    <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <append>trueappend>
        
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERRORlevel>
        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>2160maxHistory> 
            
            <totalSizeCap>30GBtotalSizeCap>
        rollingPolicy>
        <encoder>
            
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] ${appName} %-5level %logger %L - %msg%npattern>
            <charset>UTF-8charset>
        encoder>
    appender>

    
    <root level="INFO">
        <appender-ref ref="consoleLog"/>
        <appender-ref ref="fileInfoLog"/>
        <appender-ref ref="fileErrorLog"/>
    root>
configuration>

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

demo地址

你可能感兴趣的:(项目架构相关)