Spring Boot 使用 slf4j 日志

1、Spring Boot 使用 slf4j 日志

在开发中经常使用 System.out.println() 来打印一些信息,但是这样不好,因为大量的使用 System.out 会增加
资源的消耗。实际项目中使用的是 slf4j logback 来输出日志,效率挺高的, Spring Boot 提供了一套日志系
统, logback 是最优的选择。
控制台打印输出日志
System.out.println( 需要输出的内容字符串 )
一般在开发阶段需要输出的信息较多,作为产品部署后则输出信息较少,引入了一种常量的定义方式以控制是
否输出日志
可以通过 Constants 接口中的常量定义是否需要输出,或者使用 int 型来控制不同的输出等级
外观模式:【应用场景、优缺点、编码】,提醒大家必须记忆设计模式中的 6 大原则
为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容
易使用。可以降低访问复杂系统的内部子系统时的复杂度,简化客户端之间的接口。属于 23 种设计模式中的
结构型设计模式
优点: 1 、减少系统相互依赖。 2 、提高灵活性。 3 、提高了安全性。
缺点:不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。
编码实现:
1 、产品接口
public interface Shape {
public void draw ();
}
2 、具体实现
3 、定义子系统的外观或者门面。该子系统中包括多个产品组件
class ShapeFacade {
private Circle circle ;
private Square square ;
public ShapeFacade (){
circle = new Circle();
square = new Square();
}
public void drawCircle (){
circle .draw();
}
public void drawSquare (){
square .hashCode();
}
public void drawCircleAndSqure (){
circle .draw();
square .draw();
}
}
后记:事实上感觉笔记中提到的计算机案例似乎更能说明问题,建议参考
感觉电脑的例子更形象:电脑整机是 CPU 、内存、硬盘的外观。有了外观以后,启动电脑和关闭电脑都简化
了。直接 new 一个电脑。在 new 电脑的同时把 cpu 、内存、硬盘都初始化好并且接好线。对外暴露方法(启
动电脑,关闭电脑)。
启动电脑(按一下电源键):启动 CPU 、启动内存、启动硬盘
关闭电脑(按一下电源键):关闭硬盘、关闭内存、关闭 CPU
1. slf4j 介绍
SLF4J 即简单日志门面,不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法, SLF4J
是一个用于日志系统的简单 Facade ,允许最终用户在部署其应用时使用其所希望的日志系统。
这里的意思是:只需要按统一的方式写记录日志的代码,而无需关心日志是通过哪个日志系统,以什么风格输
出的。因为它们取决于部署项目时绑定的日志系统。例如,在项目中使用了 slf4j 记录日志,并且绑定了 log4j
即导入相应的依赖,则日志会以 log4j 的风格输出;后期需要改为以 logback 的风格输出日志,只需要将 log4j
替换成 logback 即可,不用修改项目中的代码。这对于第三方组件的引入的不同日志系统来说几乎零学习成本,
况且它的优点不仅仅这一个而已,还有简洁的占位符的使用和日志级别的判断。
slf4j-log4j 通过 slf4j 调用 log4j 的实现
1 、添加依赖

2、在 resources 根目录下创建一个 log4j 的配置文件 log4j.properties 

log4j.rootLogger = DEBUG, stdout 根日志记录器,参数 1 为需要输出的日志等级,
参数 2 为日志输出的目标地名称 stuout
log4j.appender.stdout = org.apache.log4j.ConsoleAppender 设置 stdout 是控制台
输出
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout 配置日志输出的
格式
log4j.appender.stdout.layout.ConversionPattern = %5p [%t] - %m%n
3 、编程中使用日志记录器输出用户自定义日志信息

 

Log4j 输出的目的地
org.apache.log4j.ConsoleAppender (控制台)
org.apache.log4j.FileAppender (文件)
org.apache.log4j.DailyRollingFileAppender (每天产生一个日志文件)
org.apache.log4j.RollingFileAppender (文件大小到达指定尺寸的时候产生一个新的文件)
org.apache.log4j.WriterAppender (将日志信息以流格式发送到任意指定的地方)
SpringBoot 输出日志
debug:
true SpringBoot 框架启动时自动输出日志信息,同时显示相互之间的依赖关系。仅仅用于开发阶段,
产品阶段一定关闭,或者删除该配置
正因为 sfl4j 有如此多的优点,阿里已经将 slf4j 作为他们的日志框架了。在《阿里 Java 开发手册 ( 正式版 ) 》中,
日志规约一项第一条就强制要求使用 slf4j
1. 【强制】应用中不可直接使用日志系统(
Log4j Logback )中的 API ,而应依赖使用日志框架 SLF4J 中的 API
使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。
强制两个字体现出了 slf4j 的优势,所以建议在实际项目中,使用 slf4j 作为自己的日志框架。使用 slf4j 记录日
志非常简单,直接使用 LoggerFactory 创建即可。
目前 SpringBoot 针对日志系统默认采用 logback
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Test {
private static final Logger logger = LoggerFactory.getLogger(Test.class);
// ……
}
2. application.yml 中对日志的配置
Spring Boot slf4j 支持的很好,内部已经集成了 slf4j ,一般在使用的时候,会对 slf4j 做一下配置。
application.yml 文件是 Spring Boot 中唯一需要配置的文件,一开始创建工程的时候是 application.properties
文件,一般推荐使用 yml 文件,因为 yml 文件的层次感特别好,看起来更直观,但是 yml 文件对格式要求比
较高,比如英文冒号后面必须要有个空格,否则项目估计无法启动,而且也不报错。用 properties 还是 yml
视个人习惯而定,实际上都是可以的。
application.yml 文件中对日志的配置:
logging:
config: logback.xml
level: 针对不同的包可以设置不同的日志输出等级,基本格式为【包名称 : 等级】
com.yan.dao: trace
logging.config 是用来指定项目启动的时候,读取哪个配置文件,这里指定的是日志配置文件是根路径下的
logback.xml 文件,关于日志的相关配置信息,都放在 logback.xml 文件中了。 logging.level 是用来指定具体的
mapper 中日志的输出级别,例如配置表示 com.yan.dao 包下的所有 mapper 日志输出级别为 trace ,会将操作
数据库的 sql 打印出来,开发时设置成 trace 方便定位问题,在生产环境上,将这个日志级别再设置成 error
级别即可。
常用的日志级别按照从高到低依次为: ERROR WARN INFO DEBUG TRACE 。可以通过日志输出等级来
控制日志输出的详细程度
3. logback.xml 配置文件解析
application.yml 文件中,指定了日志配置文件 logback.xml
logback.xml 文件中主要用来做日志的相关配置。
logback.xml 中可以定义日志输出的格式、路径、控制台输出格式、文件大小、保存时长等。
3.1 定义日志输出格式和存储路径
<configuration> 可以理解为定义常量, name 就是常量名称, value 就是对应的值
<property name="LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level
%logger{36} - %msg%n" />
<property name="FILE_PATH" value="D:/logs/demo.%d{yyyy-MM-dd}.%i.log" />
</configuration>
配置文件的含义:首先定义一个格式,命名为 LOG_PATTERN ,该格式中 %date 表示日期, %thread 表示线程
名, %-5level 表示级别从左显示 5 个字符宽度, %logger{36} 表示 logger 名字最长 36 个字符, %msg 表示日
志消息, %n 是换行符。
然后再定义一下名为 FILE_PATH 文件路径,日志都会存储在该路径下。 %i 表示第 i 个文件,当日志文件达到
指定大小时,会将日志生成到新的文件里,这里的 i 就是文件索引,日志文件允许的大小可以设置。这里需要
注意的是,不管是 windows 系统还是 Linux 系统,日志存储的路径必须要是绝对路径。
3.2 定义控制台输出
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder><!-- 按照上面配置的 LOG_PATTERN 来打印日志 -->
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
</configuration>
使用 <appender> 节点设置个控制台输出 class="ch.qos.logback.core.ConsoleAppender" 的配置,定义为
CONSOLE 。使用上面定义好的输出格式 LOG_PATTERN 来输出,使用 ${} 引用进来即可。
3.3 定义日志文件的相关参数
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 按照上面配置的 FILE_PATH 路径来保存日志 -->
<fileNamePattern>${FILE_PATH}</fileNamePattern>
<maxHistory>15</maxHistory> 日志保存 15
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize> 单个日志文件的最大,超过则新建日志文件存储
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<!-- 按照上面配置的 LOG_PATTERN 来打印日志 -->
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
</configuration>
使用 <appender> 定义一个名为 FILE 的文件配置,主要是配置日志文件保存的时间、单个日志文件存储的大小、
以及文件保存的路径和日志的输出格式。
3.4 定义日志输出级别
<configuration>
<logger name="com.yan" level="INFO" />
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</configuration>
有了上面那些定义后,最后使用 <logger> 来定义一下项目中默认的日志输出级别,这里定义级别为 INFO ,然
后针对 INFO 级别的日志,使用 <root> 引用上面定义好的控制台日志输出和日志文件的参数。这样 logback.xml
文件中的配置就设置完了。

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring使用 SLF4J 和 Log4j2,需要在 Gradle 中添加以下依赖: ``` dependencies { implementation 'org.springframework.boot:spring-boot-starter' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-log4j2' implementation 'org.slf4j:slf4j-api:1.7.30' implementation 'org.slf4j:jul-to-slf4j:1.7.30' implementation 'org.slf4j:log4j-over-slf4j:1.7.30' implementation 'org.apache.logging.log4j:log4j-core:2.14.1' implementation 'org.apache.logging.log4j:log4j-slf4j-impl:2.14.1' } ``` 其中,`spring-boot-starter-log4j2` 包含了 Log4j2 的依赖,`slf4j-api` 是 SLF4J 的接口,`jul-to-slf4j` 和 `log4j-over-slf4j` 是将 JUL 和 Log4j 转换为 SLF4J 的实现,`log4j-core` 和 `log4j-slf4j-impl` 是 Log4j2 的实现。 在 Spring配置 Log4j2,需要在 `src/main/resources` 目录下创建一个 `log4j2.xml` 文件,配置如下: ``` <?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> </Appenders> <Loggers> <Root level="info"> <AppenderRef ref="Console"/> </Root> </Loggers> </Configuration> ``` 这里使用了一个控制台日志输出的 Appender,配置日志输出的格式和级别。最后将 Appender 添加到 Root Logger 中即可。 在 Spring使用日志,可以直接使用 SLF4J 的接口,例如: ``` import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class MyClass { private static final Logger logger = LoggerFactory.getLogger(MyClass.class); public void myMethod() { logger.debug("Debug message"); logger.info("Info message"); logger.warn("Warn message"); logger.error("Error message"); } } ``` 这里使用了 `LoggerFactory.getLogger` 方法创建了一个 Logger 实例,然后使用不同级别的日志输出信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值