springboot中怎么进行统一日志处理?

一.springboot的日志级别

日志级别从低到高有:OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL

高级别包含了低级别,级别越高打印信息越先详细,默认情况下,spring boot从控制台打印出来的日志级别为INFO级别,设置如下

logging:
  level:
    root: warn # 设置日志级别为警告

此时的日志只能输出到控制台,输出不到文件中

二.Logback日志的详细使用

如果我们想将日志输出到文件中,可以使用Logback日志,spring boot内部使用Logback作为日志实现的框架。

使用步骤:

(1)删除yaml中其它日志的配置以及我们设置的日志级别

(2)resources下创建logback-spring.xml文件,在xml中可以配置日志级别、日志输出位置等信息



    
    
    
    

    logback
    
    

    
    
    
    
    
    
    
    


    
    
        
        
        
            INFO
        
        
            ${CONSOLE_LOG_PATTERN}
            
            UTF-8
        
    


    

    
    
        
        ${log.path}/log_info.log
        
        
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
            UTF-8
        
        
        
            
            ${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log
            
                100MB
            
            
            15
        
        
        
            INFO
            ACCEPT
            DENY
        
    

    
    
        
        ${log.path}/log_warn.log
        
        
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
            UTF-8 
        
        
        
            ${log.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.log
            
                100MB
            
            
            15
        
        
        
            warn
            ACCEPT
            DENY
        
    


    
    
        
        ${log.path}/log_error.log
        
        
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
            UTF-8 
        
        
        
            ${log.path}/error/log-error-%d{yyyy-MM-dd}.%i.log
            
                100MB
            
            
            15
        
        
        
            ERROR
            ACCEPT
            DENY
        
    

    
    
    
    
        
        

        
        
            
            
            
            
        
    


    
    

        
            
            
            
            
            
        
    

 启动类后,指定的输入日志路径会出现三个log文件,springboot的运行日志会出现在log_info.log文件中,但错误日志信息默认不会输入到文件中

springboot中怎么进行统一日志处理?_第1张图片

(3)若想将错误日志输出到文件中,则需要

给全局异常类加上@slf4j注解,然后在全局异常处理方法中编写

log.要输出到的日志(e.getMessage);

@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
    //自定义异常
    @ResponseBody
    @ExceptionHandler(GuLiException.class)
    public R error(GuLiException e){
        e.printStackTrace();
        log.info(e.getMsg());
        return R.error().
                code(e.getCode()).
                message(e.getMsg());
    }
}

此时只出现一行错误信息,并不详细

springboot中怎么进行统一日志处理?_第2张图片

(4)若想输出更详细的错误日志到文件中,则要利用工具类

public class ExceptionUtil {

    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();
    }
}

 调用工具类getMessage方法

log.error(ExceptionUtil.getMessage(e));

全局异常处理类中创建一个toString()方法

@Override
public String toString() {
    return "GuliException{" +
        "message=" + this.getMessage() +
        ", code=" + code +
        '}';
}

你可能感兴趣的:(Java开发系列,spring,boot,后端)