SpringBoot+Slf4j+Logback日志记录方案

目录

依赖

配置

实现


简单介绍下几大日志框架之间的关系

Log4j:这是最早的日志框架之一。

Logback:这是log4j的升级版。

Log4j2:最新推出的日志框架。

Slf4j:日志门面,为各种日志框架提供统一的记录日志的接口。

接下来主要讲一下Logback的实现

依赖

spring-boot-dependencies 包含了 SLF4J,日志框架 Logback 的依赖,因此在使用 Spring Boot 项目时,SLF4J , Logback是自动包含的。

XML 复制代码
<!-- SpringBoot 依赖配置 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>${spring-boot.version}</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

配置

在 Logback 配置文件中(如 resources/logback.xml)进行自定义配置,以满足日志需求。

Logback 配置文件的部分能力

1. 日志级别:可以设置全局日志级别,例如 DEBUG、INFO、WARN 或 ERROR。

2. 日志输出格式:可以定义日志消息的输出格式,包括日期时间格式、日志级别、线程名、消息内容等。

3. 日志输出目的地:可以配置将日志输出到控制台、文件、数据库、网络等。

4. 滚动策略:对于文件输出,可以配置滚动策略,例如按大小滚动或按时间滚动。

5. 异步日志:可以提高日志输出的性能,通过异步方式记录日志。

6. 日志过滤:可以定义过滤规则,例如只记录特定级别的日志或只记录包含特定关键字的日志。

7. 附加配置:可以配置其他高级功能,例如使用多个日志上下文、集成第三方库等。

Logback 日志框架中的部分类介绍

ch.qos.logback.core.rolling.RollingFileAppender 是 Logback 日志框架中的一个类,它用于将日志消息追加到一个滚动文件中。当文件达到一定大小时,它会自动滚动,创建一个新的日志文件,同时保留旧的日志文件以便后续查看。

ch.qos.logback.core.rolling.TimeBasedRollingPolicy 是 Logback 日志框架中的一个滚动策略类,用于按时间滚动日志文件。

ch.qos.logback.classic.filter.LevelFilter 是 Logback 日志框架中的一个过滤器类,用于根据日志事件的级别来决定是否将该事件传递给后续的日志处理组件。

ch.qos.logback.core.ConsoleAppender 是 Logback 日志框架中的一个类,用于将日志消息输出到控制台。

参考以下配置:

XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds">

   <!-- 日志输出格式 -->
   <property name="logPattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
   <!-- 日志存放路径 -->
   <property name="logPath" value="logs/bibo" />
   
    <!-- 控制台输出 -->
   <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
      <encoder>
         <pattern>${logPattern}</pattern>
      </encoder>
   </appender>

    <!-- 系统日志输出 INFO -->
   <appender name="FILEINFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
       <file>${logPath}/info.log</file>
        <!-- 循环政策:基于时间创建日志文件 -->
      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
         <fileNamePattern>${logPath}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
         <!-- 日志最大的历史 90天 -->
         <maxHistory>90</maxHistory>
      </rollingPolicy>
      <encoder>
         <pattern>${logPattern}</pattern>
      </encoder>
      <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>INFO</level>
            <!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
   </appender>
   
    <!-- 系统日志输出 ERROR -->
    <appender name="FILEERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
       <file>${logPath}/error.log</file>
        <!-- 循环政策:基于时间创建日志文件 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
            <fileNamePattern>${logPath}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
         <!-- 日志最大的历史 90天 -->
         <maxHistory>90</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${logPattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>ERROR</level>
         <!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
         <!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

   <!-- 一些第三方包的日志过滤级别  -->
   <logger name="org.springframework" level="warn" />
   <logger name="org.apache" level="WARN" />
   
   <!--系统操作日志总体输出级别-->
    <root level="info">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILEINFO" />
        <appender-ref ref="FILEERROR" />
    </root>
</configuration>

实现

为某个具体的类创建一个名为logger的静态日志记录器对象,并且这个对象在初始化后不能再被修改。在后续的代码中,可以使用这个logger对象来进行日志记录。

java 复制代码
private final static Logger logger = LoggerFactory.getLogger(SysLoginService.class);

logger常用记录日志级别

1. DEBUG:指出细粒度信息事件对调试应用程序是非常有帮助的,主要用于开发过程中打印一些运行信息。

2. INFO:记录一般信息,这些信息可以帮助开发人员了解应用程序的运行情况。

3. WARN:记录警告信息,这些信息可能会导致潜在的问题,但不会影响应用程序的正常运行。

4. ERROR:指出虽然发生错误事件或者异常捕获,但不影响系统的继续运行。打印错误和异常信息,如果不想输出太多的日志,可以使用这个级别。

java 复制代码
logger.info("账号密码尝试登录:{}, IP: {}", username, IpUtils.getIpAddr(ServletUtils.getRequest()));
try {
    logger.debug("res: {}", res);
} catch (Exception e) {
    logger.warn("error", e);
    logger.error(e.getMessage(), e);
    logger.error("Bad get request:{}", newUrl);
}
相关推荐
NiNg_1_2344 小时前
SpringBoot整合SpringSecurity实现密码加密解密、登录认证退出功能
java·spring boot·后端
种树人202408194 小时前
如何在 Spring Boot 中启用定时任务
spring boot
Chrikk5 小时前
Go-性能调优实战案例
开发语言·后端·golang
幼儿园老大*5 小时前
Go的环境搭建以及GoLand安装教程
开发语言·经验分享·后端·golang·go
canyuemanyue5 小时前
go语言连续监控事件并回调处理
开发语言·后端·golang
杜杜的man5 小时前
【go从零单排】go语言中的指针
开发语言·后端·golang
苹果醋37 小时前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx
Wx-bishekaifayuan7 小时前
django电商易购系统-计算机设计毕业源码61059
java·spring boot·spring·spring cloud·django·sqlite·guava
customer087 小时前
【开源免费】基于SpringBoot+Vue.JS周边产品销售网站(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·java-ee·开源