SpringBoot-日志系统
1. Logback 介绍
- Logback 是由 log4j 创始人设计的又一个开源日志组件
- Logback 当前分成三个模块:logback-core,logback- classic 和 logback-access
- logback-core 是其它两个模块的基础模块,类似与 springframework
- logback-classic 是 log4j 的一个改良版本。此外 logback-classic 完整实现 SLF4J API。使你可以很方便地更换成其它日志系统如 log4j 或 JDK14 Logging
- logback-access 访问模块与 Servlet 容器集成提供通过 Http 来访问日志的功能
2. log4j
和 SpringBoot 集成的 log4j 依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j</artifactId> <version>1.3.8.RELEASE</version> </dependency>
3. SLF4J
Simple Logging Facade for Java(SLF4J)用作各种日志框架(例如java.util.logging,logback,log4j)的简单外观或抽象,允许最终用户在部署时插入所需的日志框架。
参考:https://blog.csdn.net/qq_39326472/article/details/122569587
4. SpringBoot 日志系统
1. 日志门面
日志门面:是对不同日志框架提供的一个门面封装,可以在部署的时候不修改任何配置即可接入一种日志实现方案。
1. common-logging
由 appach 提供的一个通用的日志接口。常见的使用代码:
import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class A { private static Log log = LogFactory.getLog(A.getClass()); log.info("参数:" + name); }
2. slf4j
slf4j全称为Simple Logging Facade for JAVA,java简单日志门面。类似于Apache Common-Logging,是对不同日志框架提供的一个门面封装,可以在部署的时候不修改任何配置即可接入一种日志实现方案。
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; @Service public class LogServiceImple implements LogService { private static final Logger log = LoggerFactory.getLogger(LogServiceImple.class); @Override public String creatName(String name) { log.info("参数:{}", name); return name + "是二货!"; } }
也可以结合 lombok
注解 @Slf4j
使用
@Slf4j @Service public class LogServiceImple implements LogService { @Override public String creatName(String name) { log.info("参数:{}", name); return name + "是二货!"; } }
Slf4j 相比 Common-logging,个人感觉就是多了 log.info("参数:{}", "张三")
这种使用 {} 填充参数用法,Common-logging 只能拼接了,Slf4j 也是我们常用的,两种日志门面都在 spring-boot-start
中有,所有都可以直接使用。
2. 日志实现
相比上面的 Slf4j 和 Common-logging 两种日志门面,我们实际需要日志的实现,常用的就是 log4j 和 logback 了。Springboot 默认使用 logback,也是推荐使用的,我们可以不做修改。
当需要修改的时候,只需修改 pom 相关的 starter
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <!-- 排除自带的logging依赖 --> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <!--添加 log4j 依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j</artifactId> <version>1.3.8.RELEASE</version> </dependency> </dependencies>
这样就修改 log4j 作为日志系统的底层实现,使用方法不用修改。官方建议使用 logback
3. 日志格式说明
4. 日志级别
日志级别可以帮助我们筛选信息,从而节省程序员筛选日志的时间,日志级别可以控制不同环境下,打印日志的详细程度,如开发环境我们需要详细的日志信息,而线上环境我们为了性能,就打印少量的日志
- trace:级别最低
- debug:调试级别的,常用于跟踪程序的进展
- info:普通的打印信息(默认的日志级别)
- warn:警告级别,不影响使用,但应该注意
- error:错误级别,错误日志信息打印
- fatal:致命级别,因代码异常导致程序退出,级别最高
日志的级别越高,打印的日志信息就越少
设置 SpringBoot 日志级别:默认 info
logging: level: # 全局日志级别 root: info # 指定包的日志级别 com.demo.service: warn
5. 持久化日志
将日志打印到固定路径中:
logging: file: path: D:\gaox\logs
将日志打印到固定文件中:
logging: file: name: D:\gaox\logs\test.txt
6. 日志配置
logback 默认读取 logback-spring.xml
, logback-spring.groovy
, logback.xml
, logback.groovy
几个配置文件,放在 src/main/resource 下即可。也可以自己指定配置文件:
logging.config=classpath:logging-config.xml
For Example: logback.xml
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <contextName>logback</contextName> <property name="log.path" value="/logs/xxxx" /> <!--输出到控制台--> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <!-- <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter>--> <encoder> <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!--输出到文件--> <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}/logback.%d{yyyy-MM-dd}.log</fileNamePattern> </rollingPolicy> <encoder> <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="info"> <appender-ref ref="console" /> <appender-ref ref="file" /> </root> <!-- logback为java中的包 --> <logger name="com.xxx"/> <!--logback.LogbackDemo:类的全路径 --> <logger name="com.xxx.xxx.Test" level="WARN" additivity="false"> <appender-ref ref="console"/> </logger> </configuration>
本文作者:primaryC
本文链接:https://www.cnblogs.com/cnff/p/17603955.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步