springboot——简单日志打印

SpringBoot简单日志打印

输出日志文件 及全局异常捕获处理

pom依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
 
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
 
</dependencies>

spring-boot-starter这里面已经自带了这次日志需要使用的依赖了,所以不用导额外的。

application.properties:

简单为这个日志使用配置一下吧:

logging:
   level:
      web: info
     #文件路径为生成项目路径
   file:
     name: log.log
    #文件路径为生成系统盘路径
#   file:
#     path: D:\\A_springBootLog

新建一个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 TestSoGa {
   //记得加上这个哇,这是告诉全世界,你要开始在这类里面使用日志
 protected static final Logger logger = LoggerFactory.getLogger(TestSoGa.class);
    
 
    @RequestMapping("/testlog")
    public String helloworld() {
        logger.info("log开始生成");
        return "Hello world!";
    }
 
 
}

运行,访问一下 @RequestMapping("/testlog")

访问后,OK日志打印处理了,然后日志文件也生成了(本地路径的去本地系统盘路径看,绝对路径的在项目看)。

结合这个日志打印,那么我们来配置全局异常捕获,这么一来,运维人员就舒服点了,去看日志,然后我们异常捕获给他做点日志处理,我们开发也不用被牵扯过去解释了。

异常Handler,MyExceptionHandler.java

首先, 建一个异常Handler,MyExceptionHandler.java。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
 
@ControllerAdvice
public class MyExceptionHandler {
    private static Logger logger = LoggerFactory.getLogger(MyExceptionHandler.class);
    @ExceptionHandler(value = Exception.class)
    public void defaultExceptionHandler(HttpServletRequest req, HttpSession session,Exception e){
        String errorSource=  session.getAttribute("errorSource").toString();
        //根据抓获的异常类型,做逻辑处理,并打印日志信息
        if(e instanceof java.lang.NullPointerException){
 
            logger.info("空指针异常---"+"---出错的方法是:"+errorSource);
        }
        if(e instanceof java.lang.ArithmeticException){
            logger.info("使用0作为分母---"+"---出错的方法是:"+errorSource);
        }
 
        e.printStackTrace();
        System.out.println("全局异常捕获中");
    }
 
 
}

异常测试

然后紧接着,先放着吧,上面的日志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 TestSoGa {
   //记得加上这个哇,这是告诉全世界,你要开始在这类里面使用日志
 protected static final Logger logger = LoggerFactory.getLogger(TestSoGa.class);
    
 
    @RequestMapping("/testlog")
    public String helloworld() {
        logger.info("log开始生成");
        return "Hello world!";
    }
  @RequestMapping("/errortest")
    public Integer ErrorTest(HttpSession session) {
 
 
        String thisMethodName = new Exception().getStackTrace()[0].getMethodName();// 获得当前的方法名
        String thisClassName = new Exception().getStackTrace()[0].getClassName();// 获得当前的方法名
        session.setAttribute("errorSource","方法名称->"+thisMethodName+"   |  "+"控制器名称->"+thisClassName);
        System.out.println("**********"+thisMethodName+"*************"+thisClassName);
 
        return 100 / 0;
    }
 
    @RequestMapping("/errortest2")
    public String ErrorTest2(HttpSession session) {
        String thisMethodName = new Exception().getStackTrace()[0].getMethodName();// 获得当前的方法名
        String thisClassName = new Exception().getStackTrace()[0].getClassName();// 获得当前的类名
        session.setAttribute("errorSource","方法名称->"+thisMethodName+"   |  "+"控制器名称->"+thisClassName);
        String tfk= session.getAttribute("testNULLSessionValue").toString();
 
        return tfk;
    }

 
}

以上全局异常捕获及简单的配合日志打印处理已经完毕了

访问一下 @RequestMapping("/errortest2")

这是个故意为了抛异常而弄的, 最后一行就是故意抛出个空指针异常咯,因为session值根本就没值

然后前面获取当前的方法名啊,类名啊 这些,大家都可以自己发挥,也就起到后面日志打印的时候,提供下异常源跟踪。

然后看异常Handler里面的方法:

String errorSource= session.getAttribute("errorSource").toString(); //根据抓获的异常类型,做逻辑处理,并打印日志信息 if(e instanceof java.lang.NullPointerException){ logger.info("空指针异常---"+"---出错的方法是:"+errorSource); }就看这几行吧, 就是把之前那边的异常跟踪源信息放到session,从这边取出来, 然后就是小重点了:

e instanceof java.lang.NullPointerException 这个,就是用来判断当前捕获到的异常是什么类型,然后就可以操作了。

结果图:

img

String errorSource= session.getAttribute("errorSource").toString(); //根据抓获的异常类型,做逻辑处理,并打印日志信息 if(e instanceof java.lang.NullPointerException){ logger.info("空指针异常---"+"---出错的方法是:"+errorSource); }

原文链接:https://blog.csdn.net/qq_35387940/article/details/83861805

posted @ 2021-07-29 17:15  渝思  阅读(1670)  评论(0编辑  收藏  举报