日志
日志其实就是记录程序日常运行的信息,主要作用如下:
编程期调试代码
运营期记录信息
记录日常运营重要信息(峰值流量、平均响应时长……)
记录应用报错信息(错误堆栈)
记录运维过程数据(扩容、宕机、报警……)
1.代码中使用日志工具记录日志
日志的使用格式非常固定,直接上操作步骤:
步骤①:添加日志记录操作
@RestController @RequestMapping("/books") public class BookController extends BaseClass{ private static final Logger log = LoggerFactory.getLogger(BookController.class); @GetMapping public String getById(){ log.debug("debug..."); log.info("info..."); log.warn("warn..."); log.error("error..."); return "springboot is running...2"; } }
注:
可以使用lombok组件,使用@Sl4fj注解进行简化开发。
可以看我的博客日志优化
步骤②:设置日志输出级别
日志设置好以后可以根据设置选择哪些参与记录。这里是根据日志的级别来设置的。日志的级别分为6种,分别是:
TRACE:运行堆栈信息,使用率低
DEBUG:程序员调试代码使用
INFO:记录运维过程数据
WARN:记录运维过程报警数据
ERROR:记录错误堆栈信息
FATAL:灾难信息,合并计入ERROR
一般情况下,开发时候使用DEBUG,上线后使用INFO,运维信息记录使用WARN即可。下面就设置一下日志级别:
# 开启debug模式,输出调试信息,常用于检查系统运行状况 debug: true 1 2 这么设置太简单粗暴了,日志系统通常都提供了细粒度的控制 # 开启debug模式,输出调试信息,常用于检查系统运行状况 debug: true # 设置日志级别,root表示根节点,即整体应用日志级别 logging: level: root: debug
步骤③:设置日志组,控制指定包对应的日志输出级别,也可以直接控制指定包对应的日志输出级别
logging: # 设置日志组 group: # 自定义组名,设置当前组中所包含的包 ebank: com.itheima.controller level: root: warn # 为对应组设置日志级别 ebank: debug # 为对包设置日志级别 com.itheima.controller: debug
总结
日志用于记录开发调试与运维过程消息
日志的级别共6种,通常使用4种即可,分别是DEBUG,INFO,WARN,ERROR
可以通过日志组或代码包的形式进行日志显示级别的控制
基于lombok提供的@Slf4j注解为类快速添加日志对象
2.日志输出格式控制
日志已经能够记录了,但是目前记录的格式是SpringBoot给我们提供的,如果想自定义控制就需要自己设置了。先分析一下当前日志的记录格式。
对于单条日志信息来说,日期,触发位置,记录信息是最核心的信息。级别用于做筛选过滤,PID与线程名用于做精准分析。
logging: level: root: info file: path: ./log/${server.port} pattern: file: '%d{yyyy/MM/dd HH:mm:ss.SSS} %clr(%-5level) [%magenta(%thread)] %cyan(%logger{15}) : %msg%n' console: '%d{yyyy/MM/dd HH:mm:ss.SSS} %clr(%-5level) [%magenta(%thread)] %cyan(%logger{15}) : %msg%n'
百分号格式化解释:
%d:日期,大括号里面为日期的显示格式; %clr(): 根据内容显示不同颜色的的方法,一般是给“日志级别”这个信息使用的; %level:日志级别,百分号和关键字中间的短杠和数字(-5)表示显示这么多个字符的宽度,内容不足则补充空格占位; %magenta():将内容显示为品红色字体。显示为其他颜色可以参考这个图,注意看图中绿色字体; (%thread):线程名; %cyan:将内容显示为青色字体; %logger:事件发生的位置的所在类的全类名; %line:事件发生的位置的行号; %msg:事件信息; %n:换行,输出跨操作系统的换行符号;
配置参数:
logging.level.* : 作为package(包)的前缀来设置日志级别。 logging.file :配置日志输出的文件名,也可以配置文件名的绝对路径。 logging.path :配置日志的路径。如果没有配置logging.file,Spring Boot 将默认使用spring.log作为文件名。 logging.pattern.console :定义console中logging的样式。 logging.pattern.file :定义文件中日志的样式。 logging.pattern.level :定义渲染不同级别日志的格式。默认是%5p. logging.exception-conversion-word :.定义当日志发生异常时的转换字 PID :定义当前进程的ID
logging.level
logging.level设置日志级别。我们可以使用TARCE , DEBUG , INFO , WARN , ERROR , FATAL , OFF 。可以使用root级别和package级别来控制日志的输入级别。创建一个具有以下依赖关系的应用程序。
logging.file
Spring Boot 默认把日志输入到console,如果我们要把日志输入到文件中,需要配置logging.file 或者logging.path属性性。logging.file属性用来定义文件名。他不仅仅可以配置文件名,也可以路径+文件名。
logging.path 配置logging.path或者logging.path属性将日志输出到文件夹中。logging.path属性用来定义日志文件路径。 logging.patter.console 通过设置logging.patter.console属性我们能改变输出到console的日志样式。日志样式包括时间,日志级别,线程名,日志名以及消息。我们可以按我们的喜好改变日志样式 logging.pattern.file 改变文件中的日志样式我们需要设置logging.pattern.file属性。首先通过logging.file或logging.path属性,把日志记录到文件中。
3.日志文件
日志不能仅显示在控制台上,要把日志记录到文件中,方便后期维护查阅。
对于日志文件的使用存在各种各样的策略,例如每日记录,分类记录,报警后记录等。这里主要研究日志文件如何记录。
记录日志到文件中格式非常简单,设置日志文件名即可。
logging: file: name: server.log logging: file: path:D:\\log
虽然使用上述格式可以将日志记录下来了,但是面对线上的复杂情况,一个文件记录肯定是不能够满足运维要求的。
通常会每天记录日志文件,同时为了便于维护,还要限制每个日志文件的大小。下面给出日志文件的常用配置方式:
logging: logback: rollingpolicy: max-file-size: 3KB file-name-pattern: server.%d{yyyy-MM-dd}.%i.log
以上格式是基于logback日志技术设置每日日志文件的设置格式,要求容量到达3KB以后就转存信息到第二个文件中。文件命名规则中的%d标识日期,%i是一个递增变量,用于区分日志文件。