日志

1 日志
1.1 日志文件
  日志文件是用于记录系统操作事件的文件集合。在计算机中,日志文件是记录在操作系统或其他软件运行过程中发生的事件,它具有处理历史数据、诊断问题的追踪以及理解系统的活动等重要作用。
 
1.2 两种日志文件类型
⚫ 操作日志:用户在操作软件时记录下来的操作步骤,便于用户自己查看。主要针对的是用户。
⚫ 系统日志:系统日志是记录系统中硬件、软件和系统问题的信息,同时还可以监视系统中发生的事件。用户可以通过它来检查错误发生的原因,或者寻找受到攻击时攻击者留下的痕迹。主要针对的是软件开发人员、测试人员和维护人员。
 
1.3 日志的作用
⚫ 日志是系统运行的“照妖镜”,能够实时反映系统的运行状态;
⚫ 良好的日志便于后期运维和开发人员迅速定位系统问题,加快止损速度,减少系统故障带来的损失;
⚫ 日志能够无缝与监控系统结合,通过监控系统进行日志采集,拿到系统运行的相关性能指标,有利于分析系统的性能瓶颈、提前规避风险;
⚫ 便于统计与业务相关的指标数据,进行相关业务分析和功能优化。
 
1.4 日志级别
  日志级别是指日志中,记录不同层次的事件。调整日志级别,可以屏蔽掉很多调试相关的日志输出。不同的日志框架定义的日志级别不太一样,不过也都大同小异。以Log4j 为例,它的日志级别如下:
⚫ ALL:最低等级的,用于打开所有日志记录;
⚫ TRACE:很低的日志级别,一般不会使用;
⚫ DEBUG:指出细粒度信息事件对调试应用程序是非常有帮助的,主要用于开发过程中打印一些运行信息。比如函数里的输入输出;
⚫ INFO:消息在粗粒度级别上突出强调应用程序的运行过程。打印一些你感兴趣的或者重要的信息,这个可以用于生产环境中输出程序运行的一些重要信息,但是不能滥用,避免打印过多的日志;
⚫ WARN:表明会出现潜在错误的情形,有些信息不是错误信息,但是也要给程序员的一些提示;
⚫ ERROR:指出虽然发生错误事件,但仍然不影响系统的继续运行。打印错误和异常信息,如果不想输出太多的日志,可以使用这个级别;
⚫ FATAL:指出每个严重的错误事件将会导致应用程序的退出。这个级别比较高了。重大错误,这种级别你可以直接停止程序了;
⚫ OFF:最高等级的,用于关闭所有日志记录。
  如果将 log level 设置在某一个级别上,在系统中开启了某一级别的日志后,就不会打印比它级别低的日志,只打印比此级别优先级高的 log。
  例如,如果设置优先级为 WARN,那么 OFF、FATAL、ERROR、WARN 4 个级别的 log能正常输出,而 INFO、DEBUG、TRACE、 ALL 级别的 log 则会被忽略。Log4j 建议只使用四个级别,优先级从高到低分别是 ERROR、WARN、INFO、DEBUG。
 
2 Java 常用日志框架
 
2.1 日志实现框架
2.1.1 JUL 框架
  JUL(Java util Logging)是 java 原生的日志框架,使用时不需要另外引用第三方类库,相对其他日志框架,使用方便,学习简单,能够在小型应用中灵活使用。
 
2.1.2 LOG4J
  Log4j 是 Apache 下的一款开源的日志框架。通过在项目中使用 Log4J,可以控制日志信息输出到控制台、文件、甚至是数据库中。通过配置,可以控制每一条日志的输出格式,通过定义日志的输出级别,控制日志的输出过程,方便项目的调试。
 
2.1.3 Logback
  Logback 是由 log4j 创始人设计的另一个开源日志组件,性能比 log4j 要好。
 
2.1.4 log4j2
  Apache Log4j 2 是对 Log4j 的升级版,参考了 Logback 的一些优秀的设计,并且修复了一些问题,因此带来了一些重大的提升。
 
2.2 日志门面框架
  随着系统开发的进行,可能会使用不同的日志框架,造成当前系统中存在不同的日志依赖,系统难以对日志进行统一的管理和控制。而且系统中会用到很多第三方框架,它们依赖于不同的日志框架,也会造成日志体系的混乱。所以在实际使用中,需要为日志系统提供一套统一的接口(也叫门面),项目面向这些日志门面来开发,就避免了直接依赖具体的日志框架。
  因此,在日志系统中,包括日志的门面框架和日志的实现框架。日志门面定义了一组日志的接口规范,它并不提供底层具体的实现逻辑。Apache Commons Logging 和Slf4j 就属于日志门面框架。
 
2.2.1 SLF4J
  SLF4J,简单日志门面(Simple Logging Facade For Java)主要是为了给 Java 日志访问提供一套标准、规范的 API 框架,其主要意义在于提供接口,具体的实现可以交由其他日志框架,例如 log4j 和 logback 等。Slf4j 自己也提供了功能较为简单的实现,但是一般很少用到。对于一般的 Java 项目而言,日志框架会选择 Slf4j 作为门面,配上具体的实现框架(Log4j、Logback 等)。
 
2.3 日志门面+日志实现
  实际使用日志时,一般是一个“门面”搭配一个“实现”组合使用。如:Slf4j +Log4j或 Slf4j +Logback 。
  SpringBoot 默认使用 Slf4j+Logback 作为日志框架。
 
3 SpringBoot 中日志的使用
 
3.1 日志的测试
  在 Spring Boot 项目中,只要添加了 Web 依赖,日志依赖就自动添加进来了。所以,当创建了一个 Web 项目,启动后,访问控制器方法时,默认情况下,会在控制台输出一下日志信息。
 
3.2 Logback 的使用
Logback 主要分为三个模块:
⚫ logback-core:其它两个模块的基础模块;
⚫ logback-classic:它是 log4j 的一个改良版本,同时它完整实现了 slf4j API;
⚫ logback-access:与 Servlet 容器集成提供通过 Http 来访问日志的功能;
  实际使用时,日志代码都是通过 Slf4j 日志门面搭建日志系统,主要是通过修改配置文件来指定日志的各个参数。
 
3.2.1 Logback 的简单配置
(1)代码调用
(2)使用 application 配置文件进行简单的日志管理实际项目中,简单日志管理可以直接在 application.yml 中进行配置。
⚫ 设置日志打印级别
#root 表示整个项目
logging.level.root=info
#表示 web 层
logging.level.org.springframework.web=debug
#表示持久层
logging.level.org.hibernate=error
#表示具体某个包
logging.level.com.example.mapper=debug
⚫ 设置日志输出到文件中
#输出在根目录下的 test.log
logging.file.name=test.log
#输出在根目录下 logTest 文件夹下的 test.log
logging.file.name=logTest/test.log
 
3.2.2 Logback 的复杂配置
在 application.yml 配置文件中只能实现对日志的一些简单配置,如果想实现更加细粒度的日志配置,就需要使用日志实现的自带配置文件,例如 Logback 的logback.xml,Log4j 的 log4j.xml 等。
 
(1)配置文件的命名
根据不同的日志系统,按照指定的规则命名配置文件名,并放在 resources 目录下,就能自动被 Springboot 加载:
Logback 默认配置文件名:logback-spring.xml, logback-spring.groovy,logback.xml, logback.groovy
Log4j 默认配置文件名: log4j-spring.properties, log4j-spring.xml,log4j.properties, log4j.xml
Log4j2 默认配置文件名: log4j2-spring.xml, log4j2.xml
JDK (Java Util Logging): logging.properties
 
(2)logback 配置文件的组成
 
(3)多环境日志输出
通过设置文件名为-spring 结尾,可分环境配置日志。
 
posted @ 2023-04-02 19:54  Linqylin  阅读(69)  评论(0编辑  收藏  举报