SpringBoot+Slf4j+Logback日志记录方案

news/2024/7/5 1:36:38

目录

依赖

配置

实现


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

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

Logback:这是log4j的升级版。

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

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

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

依赖

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

<!-- 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 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对象来进行日志记录。

private final static Logger logger = LoggerFactory.getLogger(SysLoginService.class);

logger常用记录日志级别

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

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

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

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

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);
}


http://lihuaxi.xjx100.cn/news/2015029.html

相关文章

【多模态MLLMs+图像编辑】MGIE:苹果开源基于指令和大语言模型的图片编辑神器(24.02.03开源)

项目主页&#xff1a;https://mllm-ie.github.io/ 论文 :基于指令和多模态大语言模型图片编辑 2309.Guiding Instruction-based Image Editing via Multimodal Large Language Models &#xff08;加州大学圣巴拉分校苹果&#xff09; 代码&#xff1a;https://github.com/appl…

Git基础命令,分支,标签的使用【快速入门Git】

Git基础命令&#xff0c;分支&#xff0c;标签的使用【快速入门Git】 Git基础常用命令Git工作流程工作区&#xff0c;暂存区和版本库文件状态获取Git仓库 git init | git clone查看文件状态 git status暂存已修改的文件 git add 查看已暂存和未暂存的修改 git diff提交文件更改…

Vite 下一代的前端工具链,前端开发与构建工具

一、Vite 简介 官方中文网站&#xff1a;Vite | 下一代的前端工具链 官方定义&#xff1a; Vite&#xff0c;下一代的前端工具链&#xff0c;为开发提供极速响应。 Vue3.4版本&#xff0c;Vue新版本使用Vite构建、开发、调试、编译。 Vite的优势 极速的服务启动 使用原生…

并查集实现|并查集在相关题目中的应用|手撕数据结构专栏

前言 那么这里博主先安利一下一些干货满满的专栏啦&#xff01; 高质量干货博客汇总http://t.csdnimg.cn/jdQXqGit企业开发控制理论和实操http://t.csdnimg.cn/PyPJeDocker从认识到实践再到底层原理http://t.csdnimg.cn/G6Inp手撕数据结构http://t.csdnimg.cn/XeyJn 这里是很…

SQLSERVER tempdb 数据库异常增大解决方法及原因查找

--SQLSERVER tempdb 数据库异常增大&#xff0c;导致服务器卡顿&#xff0c;最简单的方法就是重启系统.tempdb 会自动重新创建恢复到初始大小(比如8M). --1.tempdb 文件过大&#xff0c;可以通过重新启动系统&#xff0c;tempdb数据文件及Log会释放空间到初始大小(比如8M). …

Kafka 使用手册

kafka3.0 文章目录 kafka3.01. 什么是kafka&#xff1f;2. kafka基础架构3. kafka集群搭建4. kafka命令行操作主题命令行【topic】生产者命令行【producer】消费者命令行【consumer】 5. kafka生产者生产者消息发送流程Producer 发送原理普通的异步发送带回调函数的异步发送同步…

【Docker】了解Docker Desktop桌面应用程序,TA是如何管理和运行Docker容器(2)

欢迎来到《小5讲堂》&#xff0c;大家好&#xff0c;我是全栈小5。 这是《Docker容器》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对…

【excel密码】Excel加密的三种方式

Excel中保存着重要的数据&#xff0c;想要保护数据源&#xff0c;我们会想到给Excel文件进行加密&#xff0c;方法有很多&#xff0c;今天分享三种Excel加密方法给大家。 打开密码 设置了打开密码的excel文件&#xff0c;打开文件就会提示输入密码才能打开excel文件&#xff…