SpringBoot 日志打印

发布时间:2023年12月30日

一. 自定义打印日志

开发者自定义打印日志实现步骤:

? 在程序中得到日志对象

? 使用日志对象的相关语法输出要打印的内容.

得到日志对象:

//日志工厂需要将需要打印的类的类型传递进去,这样我们才知道日志的归属类,才能更方便的定位到文体类
private static Logger logger= LoggerFactory.getLogger(LogController.class);

注意: Logger 对象是属于 org.slf4j 包下的,不要导错包

使用日志对象打印日志:

    @RequestMapping("/log")
    public void log(){
        String mesg="今天是周五,我要成为Java高手";
        logger.trace("trace -> "+mesg);
        logger.debug("debug -> "+mesg);
        logger.info("debug -> "+mesg);
        logger.warn("warn -> "+mesg);
        logger.error("error -> "+mesg);
    }

打印日志效果:

在代码中我们明明打印了五次,但为什么只打印了三条日志信息呢? 这就又涉及到了日志级别

二. 日志级别?

2.1 日志级别作用

1. 日志级别可以帮我们筛选出重要的信息,比如设置日志级别为error ,那么就可以只看程序的报错日志了,对于普通的调试日志和业务日志就可以忽略了,从而节省开发者信息筛选的时间.

2. 日志级别可以控制不同环境下,一个程序是否需要打印日志,如开发环境我们需要很详细的信息,而生产环境为了保证性能和安全性就会输出尽量少的日志,而通过日志的级别就可以实现此需求.

2.2 日志级别的分类与使用

日志级别:

? trace:微量,少许的意思,级别最低;

? debug:需要调试的时候的关键信息打印;

? info:普通的打印信息(默认日志级别);

? warn:警告,不影响使用,但需要注意的问题;

? error:错误信息,级别较高的错误日志信息;

? fatal:致命的,因为代码异常导致程序退出执行的时间(只有系统崩溃的时候才能输出的日志级别)

日志级别顺序:

级别越高,接收到的消息就越少,如果设置了 warn 就只能收到 warn、error、fatal 级别的日志了

日志级别的设置?

日志级别配置只需要在配置文件中设置“logging.level” 配置项即可:

#整个项目的日志级别
logging.level.root=warn
#给文件夹单独设置级别(level后跟对应的包名)
logging.level.www.logPrint.LogController2=warn
logging.level.www.logPrint.LogController=trace

为什么Spring Boot 可以打印日志?并设置日志级别?

因为SpringBoot 内置了两个日志框架:SLF4J + LogBack

SLF4J:让开发者使用和调用框架(底层实现日志打印的框架很多,开发者无需关心调用哪个框架,开发者只需要向SLF4J提供需求就行了)

LogBacd:最底层实现日志相关操作的框架

?三. 日志的持久化

日志的持久化能够保留到我们的磁盘上,方便发现问题后追溯问题

#设置日志文件的目录
logging.file.path=E:\\Code
#配置日志文件名
logging.file.name=E:\\Code\\2023_12_30
#配置日志文件名(直接写名字会在项目目录中创建一个日志文档)
logging.file.name=2023_12_30

四. 更简单的日志输出-lombok

安装插件:

添加依赖 :

<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
	<optional>true</optional>
</dependency>

输出日志:

//相当于@ResponseBody + @Controller
@RestController
@Slf4j
public class LogController {
//    private Logger logger
//            = LoggerFactory.getLogger(LogController.class);
    @RequestMapping("/log")
    public void log(){
        String mesg="今天是周五,我要成为Java高手";
        log.trace("trace -> "+mesg);
        log.debug("debug -> "+mesg);
        log.info("info -> "+mesg);
        log.warn("warn -> "+mesg);
        log.error("error -> "+mesg);
    }
}

注:使用 @Slf4j 注解,在程序中使用log对象即可输出日志,并且只能使用log对象才能输出,这是lombok 提供的对象名.

五. lombok原理解释

Java程序的运行原理:

?

Lombok 的作用如下图所示:

?

lombok 能够打印日志的密码就在 target 目录里面,target 为项目最终执行的代码,查看 target 目录如下?:

?

在编译时期,Lombok将 .java?文件编译成 .class 文件时,自动生成变量名为 log 的 Logger 对象

其他常用注解:

文章来源:https://blog.csdn.net/weixin_70564024/article/details/135298742
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。