SpringBoot Logback统一日志处理

一、日志

1、配置日志级别

日志记录器(Logger)的行为是分等级的。如下表所示:

分为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL

默认情况下,spring boot从控制台打印出来的日志级别只有INFO及以上级别,可以配置日志级别

# 设置日志级别
logging:
  level: 
    root: WARN

这种方式只能将日志打印在控制台上。

二、Logback日志

spring boot内部使用Logback作为日志实现的框架。

Logback和log4j非常相似,如果你对log4j很熟悉,那对logback很快就会得心应手。

1、配置logback日志

注释掉application.yml中的日志配置

SpringBoot Logback统一日志处理_第1张图片

resources 中创建 logback-spring.xml



    
    
    
    
    logback
    
    

    
    
    
    
    
    
    

    
    

    
    

    
    
        
            
            DEBUG
        
        
            
            ${CONSOLE_LOG_PATTERN}
            
            ${ENCODING}
        
    

    
    
        
        
            INFO
            ACCEPT
            DENY
        
        
        ${log.path}/log_info.log
        
            ${FILE_LOG_PATTERN}
            ${ENCODING}
        
        
        
            
            ${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log
            
                500MB
            
            
            15
        
    

    
        
        
            WARN
            ACCEPT
            DENY
        
        
        ${log.path}/log_warn.log
        
            ${FILE_LOG_PATTERN}
            ${ENCODING} 
        
        
        
            ${log.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.log
            
                100MB
            
            
            15
        
    

    
        
        
            ERROR
            ACCEPT
            DENY
        
        
        ${log.path}/log_error.log
        
            ${FILE_LOG_PATTERN}
            ${ENCODING} 
        
        
        
            ${log.path}/error/log-error-%d{yyyy-MM-dd}.%i.log
            
                100MB
            
            
            15
        
    

    
    
        
        
            
            
            
            
        
    

    
    
        
            
        
    


2、将错误日志输出到文件

类上添加注解 @Slf4j

异常输出语句 log.error(e.getMessage());

package com.stu.service.base.handler;

import com.stu.service.base.exception.CustomException;
import com.stu.service.base.result.R;
import com.stu.service.base.utils.ExceptionUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

/******************************
 * 用途说明:统一异常处理
 * 作者姓名: Administrator
 * 创建时间: 2022-04-17 23:32
 ******************************/
@Slf4j
@ControllerAdvice
public class GlobalExceptionHandler {


    /***********************************
     * 用途说明:自定义异常
     * 返回值说明: com.stu.service.base.result.R
     ***********************************/
    @ExceptionHandler(CustomException.class)
    @ResponseBody
    public R customException(CustomException e){
//        e.printStackTrace();
        log.error(e.getMessage());
        log.error(ExceptionUtils.getMessage(e));
        return R.error().message(e.getMessage()).code(e.getCode());
    }
    /***********************************
     * 用途说明:数字异常
     * 返回值说明: com.stu.service.base.result.R
     ***********************************/
    @ExceptionHandler(ArithmeticException.class)
    @ResponseBody
    public R arithmeticException(Exception e){
//        e.printStackTrace();
        log.error("e.getMessage() ==START===      "+e.getMessage()+"  ==END=== ");
        log.error("ExceptionUtils.getMessage(e) ==========START===   "+ExceptionUtils.getMessage(e)+"  ==END=== ");
        log.error("eeeeeeeeeeee ==========START===   "+e+"  ==END=== ");
        return R.error().message(e.getMessage());
    }
    /***********************************
     * 用途说明:全局异常
     * 返回值说明: com.stu.service.base.result.R
     ***********************************/
    @ExceptionHandler(Exception.class)
    @ResponseBody
    public R error(Exception e){
        log.error(ExceptionUtils.getMessage(e));
        return R.error().message(e.getMessage());
    }

}

3、将日志堆栈信息输出到文件

package com.stu.service.base.utils;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
/******************************
 * 用途说明:
 * 作者姓名: Administrator
 * 创建时间: 2022-04-18 22:26
 ******************************/

public class ExceptionUtils {

    /***********************************
     * 用途说明:
     * 返回值说明: java.lang.String
     ***********************************/
    public static String getMessage(Exception e) {
        StringWriter sw = null;
        PrintWriter pw = null;
        try {
            sw = new StringWriter();
            pw = new PrintWriter(sw);
            // 将出错的栈信息输出到printWriter中
            e.printStackTrace(pw);
            pw.flush();
            sw.flush();
        } finally {
            if (sw != null) {
                try {
                    sw.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
            if (pw != null) {
                pw.close();
            }
        }
        return sw.toString();
    }
}

调用

log.error(ExceptionUtil.getMessage(e));
作者: 明
出处: https://www.cnblogs.com/konglxblog//
版权:本文版权归作者和博客园共有
转载:欢迎转载,文章中请给出原文连接,此文章仅为个人知识学习分享,否则必究法律责任

你可能感兴趣的:(spring,boot,logback,log4j,java,spring)