SpringBoot+Slf4j+Logback日志记录方案

目录

依赖

配置

实现


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

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://www.mzph.cn/news/672890.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ONLYOFFICE 文档开发者版 8.0:API和文档生成器更新

随着 8.0 版新功能的发布&#xff0c;我们更新了编辑器、文档生成器和插件的 API。请阅读本文了解详情。 PDF 支持 我们在 documentType 参数中添加了 pdf 文档这一类型。现在完全支持PDF文件*&#xff0c;包括含有可填写字段的文件&#xff0c;并且可以在ONLYOFFICE PDF 编辑…

编程笔记 html5cssjs 080 JavaScript 跳转语句

编程笔记 html5&css&js 080 JavaScript 跳转语句 1. break 语句2. continue 语句3. return 语句注意 在JavaScript中&#xff0c;跳转语句用于改变程序执行流程的顺序. 1. break 语句 break 语句用来强制退出当前循环&#xff08;如 for、while 或 do...while 循环&am…

深入了解Spring Expression Language(SpEL)

深入了解Spring Expression Language&#xff08;SpEL&#xff09; Spring Expression Language&#xff08;SpEL&#xff09;是Spring框架中强大的表达式语言&#xff0c;它在运行时提供了一种灵活的方式来评估字符串表达式。SpEL的设计目标是在各种Spring配置和编程场景中提供…

亚马逊AWS考试认证系列 - Retake是考试的坚强后盾

为什么说Retake是考试的坚强后盾&#xff1f; 在AWS的认证考试体系里面&#xff0c;Retake 是一次重考的机会&#xff0c;允许考生在第一次未通过考试的情况下&#xff0c;再次免费参加考试&#xff0c;注意是免费的。这为考生提供了一个机会来重新准备并且免费再次进行考试。…

C++ “万能血“ void*指针

本篇文章我们来介绍一下C “万能血” void指针 为什么说他万能呢&#xff1f; 原因:C void* 是一种特殊的指针类型&#xff0c;可用于存放任意对象的地址。在函数传参中也可以作为任何实参的形参 void型详细介绍 void* 是C中的一种特殊的指针类型&#xff0c;被称为"无类…

【数据库】Unlogged 表使用

【数据库】Unlogged 表使用 前言普通表和Unlogged 表的写性能比较普通表创建和数据插入Unlogged 表创建和数据插入比较结果 Unlogged 表崩溃和正常关闭测试Unlogged 表特点总结 前言 大神偶像在开会上提及了Unlogged 表&#xff0c;它的特点很不错&#xff0c;很适合实时数据保…

关于域名递归解析服务的问题

域名递归解析服务是互联网基础设施的重要组成部分&#xff0c;它允许用户通过域名来访问网站或应用程序。然而&#xff0c;在某些情况下&#xff0c;域名递归解析服务可能会出现问题&#xff0c;导致用户无法正常访问网站或应用程序。本文将探讨域名递归解析服务可能面临的问题…

elementPlus实现动态表格单元格合并span-method方法总结

最近在做PC端需求的时候&#xff0c;需要把首列中相邻的同名称单元格合并。 我看了一下elementPlus官网中的table表格&#xff0c;span-method可以实现单元格合并。 我们先看一下官网的例子&#xff1a; 合并行或列 多行或多列共用一个数据时&#xff0c;可以合并行或列。 …

【附代码】NumPy加速库NumExpr(大数据)

文章目录 相关文献测试电脑配置数组加减乘除数组乘方Pandas加减乘除总结 作者&#xff1a;小猪快跑 基础数学&计算数学&#xff0c;从事优化领域5年&#xff0c;主要研究方向&#xff1a;MIP求解器、整数规划、随机规划、智能优化算法 如有错误&#xff0c;欢迎指正。如有…

Java 学习和实践笔记(2)

今天的学习进度&#xff1a; 注册并下载安装好了Java 8&#xff0c;之后进行以下配置。 1&#xff09;path 是一个常见的环境变量&#xff0c;它告诉系统除了在当前的目标下妹寻找此程序外&#xff0c;还可以到path指定的目录下找。 2&#xff09;Java Home 为以后其他的软…

C程序设计(第5版)谭浩强习题解答 第8章 善于利用指针

C程序设计(第5版)谭浩强习题解答 第8章 善于利用指针 1. 输入3个整数&#xff0c;要求按由小到大的顺序输出。 #include <stdio.h> int main() {void swap(int *p1, int *p2);int n1, n2, n3;int *p1, *p2, *p3;printf("input three integer n1,n2,n3:");sc…

Flask 入门8:Web 表单

Flask-WTF 扩展可以把处理 Web 表单&#xff0c;这个扩展对独立的 WTForms 包进行了包装&#xff0c;方便集成到Flask应用中。 1. 配置 与其他多数扩展不同&#xff0c;Flask-WTF 无须在应用层初始化&#xff0c;但是它要求应用配置一个密钥。密钥是一个由随机字符构成的唯一…

共享网盘系统PHP源码

新V5.0版本&#xff0c;支持上传视频、支持视频播放、支持共享&#xff0c;也可以自己用。 可以自动生成视频外链&#xff0c;下载地址&#xff0c;播放器代码&#xff0c;html代码&#xff0c;ubb代码等等。 使用方法&#xff1a; 源码上传到服务器&#xff0c;打开网站根据…

Zoho Creator低代码平台:克服移动应用开发四大挑战的利器

多年来&#xff0c;移动应用程序开发经历了翻天覆地的变化。手机屏幕上充斥着手机制造商开发的预构建应用程序的日子已经一去不复返了。今天&#xff0c;由无数应用程序开发人员开发的各种类型的应用程序主宰了您的移动设备。 除了多个操作系统之外&#xff0c;设备还具有各种…

mac协议远程管理软件:Termius for Mac 8.4.0激活版

Termius是一款远程访问和管理工具&#xff0c;旨在帮助用户轻松地远程连接到各种服务器和设备。它适用于多种操作系统&#xff0c;包括Windows、macOS、Linux和移动设备。 该软件提供了一个直观的界面&#xff0c;使用户可以通过SSH、Telnet和Mosh等协议连接到远程设备。它还支…

最新GPT4.0使用教程,AI绘画-Midjourney绘画,GPT语音对话使用,DALL-E3文生图+思维导图一站式解决

一、前言 ChatGPT3.5、GPT4.0、GPT语音对话、Midjourney绘画&#xff0c;文档对话总结DALL-E3文生图&#xff0c;相信对大家应该不感到陌生吧&#xff1f;简单来说&#xff0c;GPT-4技术比之前的GPT-3.5相对来说更加智能&#xff0c;会根据用户的要求生成多种内容甚至也可以和…

有趣的CSS - 多彩变化的按钮

目录 整体效果核心代码html 代码css 部分代码 完整代码如下html 页面css 样式页面渲染效果 整体效果 这个按钮效果主要使用 :hover 、:active 伪选择器以及 animation 、transition 属性来让背景色循环快速移动形成视觉效果。 核心代码部分&#xff0c;简要说明了写法思路&…

kyuubi 接入starrocks | doris

kyuubi 接入starrocks 一、环境 Hadoop集群 组件版本Hadoop3.1.1spark3.Xzookeeper3.XHive3.X kyuubi 版本 1.7.1 starrocks 2.X   已将kyuubi部署到yarn上&#xff0c;并且接入了spark3引擎&#xff0c;并通过Ambari进行kyuubi组件的管理&#xff0c;下面步骤为新增对sta…

【leetcode】深搜、暴搜、回溯、剪枝(C++)1

深搜、暴搜、回溯、剪枝&#xff08;C&#xff09;1 一、全排列1、题目描述2、代码3、解析 二、子集1、题目描述2、代码3、解析 三、找出所有子集的异或总和再求和1、题目描述2、代码3、解析 四、全排列II1、题目解析2、代码3、解析 五、电话号码的字母组合1、题目描述2、代码3…

Python数据可视化库之ggplot使用详解

概要 数据可视化是数据分析和数据沟通的关键部分。Python 作为一门强大的数据科学和数据分析工具,提供了多种数据可视化库,其中之一就是 ggplot。ggplot 是一个基于 ggplot2 的 Python 数据可视化库,它可以创建精美且高度可定制的图表,以更好地理解和传达数据。本文将深入…