一. 自定义打印日志
开发者自定义打印日志实现步骤:
• 在程序中得到日志对象
• 使用日志对象的相关语法输出要打印的内容.
得到日志对象:
//日志工厂需要将需要打印的类的类型传递进去,这样我们才知道日志的归属类,才能更方便的定位到文体类 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 级别的日志了
日志级别的设置
日志级别顺序:
级别越高,接收到的消息就越少,如果设置了 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 对象
其他常用注解: