SLF4J日志框架在项目中使用
介绍
SLF4J全称“Simple Logging Facade for Java”,作为各种日志框架的简单门面。例如: java.util.logging、logback 、 reload4j等。只需要切换日志框架的jar包依赖就可以切换日志框架。
SLF4J支持的日志框架包含如下:
- log4j:常用的日志框架,需要有配置文件log4j.properties
- logback:可以通过logback.xml修改日志输出配置,如果没有logback.xml则使用默认配置
- java.util.logging:JDK 1.4 logging
- simple:简单实现,只显示INFO以上级别,实际使用System.err输出
- jcl:Jakarta Commons Logging
- nop:无提示不显示所有日志
使用示例
1、引入依赖jar包
SLF4J目前已将发布了2.X版本,这里以经常用的1.7.36版本为例。
创建简单的maven工程,并引入依赖。
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.36</version>
</dependency>
<!-- log4j -->
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-reload4j</artifactId><version>1.7.36</version>
</dependency><!-- logback
<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.11</version>
</dependency> --><!-- 简单实现,只显示INFO以上级别,实际使用System.err输出
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-simple</artifactId><version>1.7.36</version>
</dependency> --><!-- jdk14
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-jdk14</artifactId><version>1.7.36</version>
</dependency> --><!-- nop 无提示不显示所有日志
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-nop</artifactId><version>1.7.36</version>
</dependency>--><!-- Jakarta Commons Logging
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-jcl</artifactId><version>1.7.36</version>
</dependency> -->
2、代码使用示例
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class LogTest {private final static Logger log = LoggerFactory.getLogger(LogTest.class);public static void main(String[] args) {log.info("这个是测试日志输出,{}","Hello World");}
}
1)如果使用log4j需要添加配置文件log4j.properties,如果没有该配置文件,无法打印日志,简单内容如下:
# Root logger option
log4j.rootLogger=INFO,file,stdout# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{2}:%L - %m%n# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=log/output-log4j.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{2}:%L - %m%n
2)如果使用logback,也可以添加配置文件logback.xml,如果没有该配置文件,就使用默认配置,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %5level %logger{36} - %msg%n</pattern></encoder></appender><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern><charset>utf-8</charset></encoder><file>log/output-logback.log</file><rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"><fileNamePattern>log/output.log.%i</fileNamePattern></rollingPolicy><triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"><MaxFileSize>1MB</MaxFileSize></triggeringPolicy></appender><root level="INFO"><appender-ref ref="CONSOLE" /><appender-ref ref="FILE" /></root>
</configuration>
3、测试打印内容
1)log4j
2023-03-10 14:55:54 [main] INFO demo.LogTest:9 - 这个是测试日志输出,Hello World
2023-03-10 14:55:56 [main] INFO demo.LogTest:9 - 这个是测试日志输出,Hello World
2)logback
2023-03-10 14:53:21 [main] INFO cn.hj.sl4j.demo.LogTest - 这个是测试日志输出,Hello World
2023-03-10 14:53:33 [main] INFO cn.hj.sl4j.demo.LogTest - 这个是测试日志输出,Hello World
3)slf4j-simple
[main] INFO cn.hj.sl4j.demo.LogTest - 这个是测试日志输出,Hello World
4)slf4j-jdk14
三月 10, 2023 3:00:53 下午 cn.hj.sl4j.demo.LogTest main
信息: 这个是测试日志输出,Hello World
5)jcl
三月 10, 2023 3:01:31 下午 org.slf4j.impl.JCLLoggerAdapter info
信息: 这个是测试日志输出,Hello World
总结
SLF4J是一个门面日志框架,统一了日志的使用标准,如果要切换不同的日志实现只需要修改对应的实现依赖jar包就可以,不需要修改java代码
相关文章:
SLF4J日志框架在项目中使用
介绍 SLF4J全称“Simple Logging Facade for Java”,作为各种日志框架的简单门面。例如: java.util.logging、logback 、 reload4j等。只需要切换日志框架的jar包依赖就可以切换日志框架。 SLF4J支持的日志框架包含如下: log4j:…...
Spark MLlib 模型训练
Spark MLlib 模型训练决策树随机森林GBDTSpark MLlib 开发框架下 : 监督学习 : 回归 (Regression) , 分类 (Classification) , 协同过滤 (Collaborative Filtering)非监督学习 : 聚类 (Clustering) 、频繁项集 (Frequency Patterns) 例子分类 : 算法分类 : 算法分类算法子分类…...
Python中变量的作用域精讲
文章目录前言一、局部变量二、全局变量前言 变量的作用域是指程序代码能够访问该变量的区域,如果超出该区域,再访问时就会出现错误。在程序中,一般会根据变量的 “有效范围” 将变量分为 “全局变量” 和 “局部变量”。 一、局部变量 局部变…...
数据仓库工程师的工作职责的相关介绍
1. BI 开发工程师的工作内容是什么? BI开发工程师(Business Intelligence Developer)是负责设计和开发企业级BI系统的专业人员。他们的主要工作是从多个数据源中提取、转换、加载和分析数据,以支持企业决策。以下是BI开发工程师的…...
ESP UART 介绍
1 UART 介绍 UART 是一种以字符为导向的通用数据链,可以实现设备间的通信。异步传输的意思是不需要在发送数据上添加时钟信息。这也要求发送端和接收端的速率、停止位、奇偶校验位等都要相同,通信才能成功。 1.1 UART 通信协议 一个典型的 UART 帧开始…...
第十三届蓝桥杯省赛Python大学B组复盘
目录 一、试题B:寻找整数 1、题目描述 2、我的想法 3、官方题解 4、另解 二、试题E:蜂巢 1、题目描述 2、我的想法 3、官方题解 三、试题F:消除游戏 1、题目描述 2、我的想法(AC掉58.3%,剩下全超时&#x…...
linux入门---vim的配置
这里写目录标题预备知识如何配置vimvim一键配置预备知识 在配置vim之前大家首先得知道一件事就是vim的配置是一人一份的,每个用户配置的vim都是自己的vim,不会影响到其他人,比如说用户xbb配置的vim是不会影响到用户wj的,虽然不同…...
Python简写操作(for、if简写、匿名函数)
Python简写操作(for、if简写、匿名函数)1. for 简写1.1 一层 for 循环1.2 两层 for 循环2. if 简写3. for 与 if 的结合简写4. 匿名函数 lambda1. for 简写 举个例子: y [1, 2, 3, 4, 5, 6] result [(i * 2) for i in y] print(result)# …...
毕业设计常用模块之温湿度模块DHT11模块使用
DHT11是一款可以测量温度数据和湿度数据的传感器 产品特点 暖通空调、除湿器、农业、冷链仓储、测试及检测设备、消费品、汽车、自动控制、数据记录器、气 象站、家电、湿度调节器、医疗、其他相关湿度检测控制 外形尺寸 第3管脚:NC 是没有用的 典型电路 通信方式…...
Cadence Allegro 导出Design Rules Net Shorts Check(DRC)Report报告详解
⏪《上一篇》 🏡《上级目录》 ⏩《下一篇》 目录 1,概述2,Design Rules Net Shorts Check(DRC)Report作用3,Design Rules Net Shorts Check(DRC)Report示例4,Design Rules Net Shorts Check(DRC)Report导出方法4.1,方法14.2,方法2...
第 46 届世界技能大赛浙江省选拔赛“网络安全“项目C模块任务书
第46届世界技能大赛浙江省选拔赛"网络安全"项目C模块(夺旗行动(CTF)挑战)第46届世界技能大赛浙江省选拔赛"网络安全"项目C模块第一部分 WEB第二部分 CRYPTO第三部分 REVERSE第四部分 MISC第五部分 PWN第46届世…...
C++:详解C++11 线程(一):MingGW 各版本区别及安装说明
MingGW 各版本区别一:MinGW、MinGW-w64 简介二:MinGW 各版本参数说明三:下载解压一:MinGW、MinGW-w64 简介 MinGW(全称为 Minimalist GNU for Windows),它实际上是将经典的开源 C 语言编译器 G…...
第十二章 ArrayList和 LinkedList的区别
ArrayList:基于动态数组(自动扩容),连续内存存储,由于底层是数组,适合使用下标进行访问,但扩容一直都是数组的缺点,所以使用尾插法进行扩容可以有效提高扩容效率。还有就是创建Array…...
案例06-复用思想的接口和SQL
目录 一:背景介绍 二:思路&方案 三:过程 1.Controller层接口的复用 2.Mapper层sql语句的复用 四:总结 一:背景介绍 我们在开发项目的过程中非常容易出现的一种现象就是用什么我就直接写什么,就像我…...
【Java学习笔记】17.Java 日期时间(2)
前言 本章继续介绍Java的日期时间。 Calendar类 我们现在已经能够格式化并创建一个日期对象了,但是我们如何才能设置和获取日期数据的特定部分呢,比如说小时,日,或者分钟? 我们又如何在日期的这些部分加上或者减去值呢? 答案…...
【学习Docker(八)】Docker Canal的安装与卸载
座右铭:《坚持有效输出,创造价值无限》 最近想了解下canal,自行搭建并完成数据同步。经过了几天的踩坑之旅,今天终于搭建成功了。 环境:canalv1.1.5、MySQL8.0、JDK1.8 安装MySQL 创建存放目录 mkdir /docker-localm…...
python的django框架从入门到熟练【保姆式教学】第三篇
在前两篇博客中,我们介绍了Django框架的模型层和数据库迁移功能。本篇博客将重点介绍Django的视图层(View),并讲解如何创建视图函数和URL路由。 视图层(View) Django的视图层是Django应用程序的另一个核心…...
Open3D(C++) Ransac拟合球体(详细过程版)
目录 一、算法原理1、计算流程2、参考文献二、代码实现三、结果展示一、算法原理 1、计算流程 空间球方程: ( x − a ) 2 + ( y − b...
Antlr Tool与antlr runtime的版本一致性问题
1. 意外的问题 在学习Antlr4的visitor模式时,使用IDEA的Antlr插件完成了Hello.g4文件的编译,指定的package为com.sunrise.hello 使用visitor模式遍历语法解析树,遍历过程中打印hello语句 public class HelloVisitorImpl extends HelloBaseVi…...
嵌入式中CAN测试自动化方法分析
can的基础知识 CAN是什么? CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO*1 国际标准化的串行通信协议在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。由于这些系统之间通信所用的数据类…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
关于uniapp展示PDF的解决方案
在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项: 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库: npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...
数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !
我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...
