目录
日志作用
- 问题定位:可以帮助开发人员快速找到问题出现的位置
- 系统监控:可以把系统的运行情况、性能调优等信息记录下来,方便系统监控和性能调优
- 记录历史:记录一些关键操作、异常情况,方便追溯问题根源
- 程序调试:记录日志来了解程序运行的情况,从而更方便的进行调试
- 安全审计:记录用户行为,找到恶意用户,以保证系统的安全性
SpringBoot日志框架
日志门面:是一个抽象层,它提供了统一的日志接口,使应用程序能够按照一致的方式记录日志,而不需要关心具体的日志实现。在应用程序中使用日志门面接口编写代码,使得应用程序可以在运行时动态地切换具体的日志实现,而不需要修改代码。其中SpringBoot使用的是slf4j
日志实现:是实现了日志门面接口的具体日志框架,应用程序在运行时通过配置文件指定所需要的具体日志实现,日志门面就会调用相应的日志实现来记录日志信息。其中SpringBoot使用的是logback
日志打印
因为日志是为当前类服务的,所以使用private
因为static就可以让整个类共享该成员,而不用每创建一个实例就创建一个新的日志类;同时在多线程情况下,使用static就可以避免出现线程安全情况
使用final主要是为了日志对象被修改,从而保证日志的正确性和可靠性。
package com.example.demo.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/test")
public class LogController {
private static final Logger logger = LoggerFactory.getLogger(LogController.class);
@RequestMapping("/log")
public void testLog() {
logger.trace("trace");
logger.debug("debug");
logger.info("info");
logger.warn("warn");
logger.error("error");
}
}
登录localhost:9999/test/log 即可看到该日志。但是只显示了info warn error,这就与下面的日志级别有关系了。
使用LogController.class打印的日志
使用"LogController"打印的日志
日志级别
类型
有小到大依次为:
- trace:调试代码时输出程序执行的详细信息
- debug:输出运行时的调试信息,帮助程序员定位到应用程序的问题
- info:输出一些重要的事件级别,比如程序启动、用户操作等。一般用于记录程序运行状态和关键操作的结果。INFO级别的日志通常会被用于监控应用程序的运行状态,以便及时发现和处理问题。
- warn:输出一些警告信息,表明系统出现了一些潜在的问题,但并不影响系统正常的运行。WARN级别的日志通常需要引起注意,但不需要立即采取行动,可以在相应的时候再进行处理。
- error:输出一些错误信息,表明系统出现了一些严重的问题,需要立即采取行动来解决。ERROR级别的日志通常用于记录系统崩溃、网络连接异常、SQL执行错误等严重的问题,对于保障系统的正常运行和及时发现问题非常重要。
- fatal:因为代码异常而导致程序退出的事件(不会出现在日志中)。
作用
- 控制日志输出的详细程度
通过设置不同的日志级别,可以根据实际情况控制应用程序输出的日志内容的详细程度,避免输出过多或过少的日志。打印信息的时候只会打印设置当前日志级别和高于设置的日志。比如SpringBoot默认设置的是info,所以我们只能看到info、warn和error信息- 帮助排查应用程序的问题
在应用程序出现问题时,可以通过查看日志文件中相应级别的日志信息来定位问题所在,例如DEBUG级别的日志可以帮助我们追踪应用程序的执行过程,ERROR级别的日志可以帮助我们快速定位错误信息等。- 提高性能
日志输出是一项相对较为耗时的操作,设置合适的日志级别可以避免无谓的日志输出,提高应用程序的性能和效率。
修改级别
在配置文件中修改日志级别,现在来修改一下上一个程序的日志级别
logging:
level:
root: error
com:
example:
demo:
controller: trace #把当前测试的包设置成最小的trace
日志永久化
上述的日志只是打印在了控制台上,并没有记录到文件(持久化)当中,这显然是不科学的。把日志记录到文件中需要需要在配置文件中修改。
配置日志文件目录
logging:
file:
# \\ 防止被当成转移字符
path: D:\\Test\\Log
level:
root: error
com:
example:
demo:
controller: trace
配置日志文件名
logging:
file:
# \\ 防止被当成转移字符
name: D:\\Test\\Log\\spring2.log
level:
root: error
com:
example:
demo:
controller: trace
简化日志打印和永久化——lombok
输出日志的对象默认是log,这是slf4j中提供的对象。
package com.example.demo.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/testlombok")
@Slf4j
public class LogLombokController {
@RequestMapping("/log")
public void testLog() {
log.trace("trace");
log.debug("debug");
log.info("info");
log.warn("warn");
log.error("error");
}
}
有什么错误评论区指出。希望可以帮到你。