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 中国大陆许可协议进行许可。

posted @   primaryC  阅读(154)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.