Log4j

 通过Log4j,我们可以控制日志信息输送到目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器。我们可以控制每一条日志的输出格式。通过定义每一条日志信息的级别,能更加细致地控制日志的生成过程。

1 log4j、log4j2与@SLF4J

2015年9月,Apache宣布不再维护Log4j。建议所有相关项目升级到Log4j2。Log4j2是Apache开发的一个新的日志框架,改进了Log4j的缺点,同时也借鉴了LogBack,号称在性能上也完胜LogBack。

log4j

log4j2

配置文件

以.properties的文件为主。

采用的是.xml,.json或者.jsn

核心JAR包

只需引入一个jar包:log4j

需要两个核心包:log4j-core和log4j-api

配置文件方式

两者基本不同

表 log4j与log4j2在用法上的主要区别

SFL4J 全称是Simple Logging Facade for Java(Java的简单日志门面),是外观模式的典型应用。

不同的日志框架,需要引入不同的jar包,及使用不同的代码获取Logger。如果项目升级需要更换不同的框架,那么就需要修改所有的地方来获取新的Logger,这将产生巨大的工作量。

而SFL4J,运用门面外观模式,提供一个接口,将不同的日志框架的使用统一起来。

图 SLF4J 的工作原理

2 Log4J

级别标准是:ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATA < OFF。

ALL

所有级别包括自定义级别

WARN

用于警告消息。

TRACE

低于DEBUG。

ERROR

错误消息日志,应用程序可以继续执行。

DEBUG

调试消息日志。

FATA

严重错误消息日志,必须中止运行程序。

INFO

信息消息。

OFF

最高级别,旨在关闭日志记录。

表 Log4j 日志级别说明

图 log4j的配置文档结构

配置文档主要有两个标签:<appender>用来配置日志输出目标的信息。<root>更节点来配置日志输出级别、输出目标等信息。

3 appender

log输出源,常用的输出源有:ConsoleAppender(控制台)、FileAppender(文件)、DailyRollingFileAppender(日常日志文件,FileAppender的子类)等。

这些输出源公有等配置选项有:

1、Threshold,指定日志信息的最低输出级别,默认DEBUG。

2、ImmediateFlush, 表示所有的消息都会被立即输出,默认true。

ConsoleAppender

Target,输出流,默认是System.out。

FileAppender

Append,表示增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是true。

File,当前消息输出的文件地址

DailyRollingFileAppender

DatePattern,输出频率,yyy-MM 表示每月产生一个新的日志文件,命名规则是:文件名.后缀.yyyy-MM

RollingFileAppender

MaxFileSize,文件到达该大小时,将会自动产生一个新的日志文件,后缀可以是KB,MB或者GB。

MaxBackupIndex,可以产生的滚动文件最大数,假如设为2,则可产生app.log.1、app.log.2两个滚动文件和app.log。

表 常见输出源的相关配置

3.1 layout

配置日志信息的输出格式的布局。常见的布局有:HTMLLayout(以HTML表格形式布局)、PatternLayout(可以灵活指定布局模式)、SimpleLayout(包含日志信息的级别和信息字符串)、TTCCLayout(包含日志产生的时间、线程、类别等信息)。

%p

日志信息的优先级,即DEBUG、INFO、WARN等。

%F

产生日志消息所在的文件名称。

%d

输出日志的时间,其后可以指定格式,如:%d{yyyy-MM-dd HH:mm:ss}。

%L

代码中的行号。

%r

自应用程序启动到输出该log信息耗费到毫秒数。

%m

输出代码中指定的具体消息。比如log.warn(“hello”); 则输出hello。

%t

产生该日志事件的线程名。

%n

一个回车换行符。

%l

日志事件发生位置,相当于%c.%M(%F:%L)的组合,包括类的全名、方法、文件名以及在代码中的行数。

%x

输出和当前线程相关联的NDC(嵌套诊断环境)。

%c

产生日志信息所属的类目。

%%

输出一个%字符。

%M

产生日志信息的方法名。

表 PatternLayout 布局格式化符号说明

例如:%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

输出:

2023-11-22 21:25:43 INFO   Application:25 – info

2023-11-22 21:25:43 WARN  Application:26 – warn

%-5 表示左对齐5个字符。

4 输出实战

log4j 日志可以输出到文件、邮件及数据库等。下面将大致介绍输出到邮件及文件到用法。

4.1 输出到邮件

首先,需要添加邮件发送的依赖:

<dependency>

<groupId>javax.mail</groupId>

<artifactId>mail</artifactId>

<version>1.4.7</version>

</dependency>

然后配置appender

图 邮件appender配置

bufferSize,默认单位是kb。是指日志超过该大小后才会发送邮件(当程序停止时也会发送邮件)。

图 log4j 发送的日志邮件

4.2 输出到文件

图 DailyRollingFileAppender C产生的日志文件

如图所示,所产生的日志文件并不符合我们的期望,我们想得到的文件是: app.yyyy-MM-dd-HH-mm.log 这种格式的。这时需要我们自定义Appender。

我们需要先分析DailyRollingFileAppender这个类:

产生日志文件是在rollOver()这个方法发生的(这个方法官方注释是:将当前文件滚动到新文件)。

图 DailyRollingFileAppender 类的rollOver方法

因为rollOver方法我们没法重写,我们的Appender类不能直接继承DailyRollingFileAppender类。我们重写CustomDailyRollingFileAppender类,并继承FileAppender。这个类相对于DailyRollingFileAppender,只需要修改两处:

图 修改activateOptions方法

图 修改rollOver方法

图 修改后生成的日志文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/161355.shtml

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

相关文章

pikachu靶场Table pikachu.member doesn’t exist:解决

背景&#xff1a; 第一次搭建pikachu靶场&#xff0c;搭建好后访问index.php后&#xff0c;尝试练习&#xff0c;发现界面显示Table pikachu.member doesn t exist&#xff0c;后来找了很多教程&#xff0c;没有解决&#xff0c;后来发现是自己没有进行初始化&#xff0c;给大家…

VMware 系列:ESXI6.7升级7.0

ESXI6.7升级7.0 一、下载补丁二、上传文件三 启用Shell四、登录Shell后台五、删除不兼容驱动六、正常升级最近,将一台使用ESXI6.7的虚拟机升级到了7.0版本,下面记录一下自己的升级过程。 升级条件 首先确保硬件是否能升级到7.0版本,物理网卡驱动为e1000e不能升级,如果是ig…

不到十个例题带你拿下c++双指针算法(leetcode)

移动零问题 https://leetcode.cn/problems/move-zeroes/submissions/ 1.题目解析 必须在原数组进行修改&#xff0c;不可以新建一个数组 非零元素相对顺序不变 2.算法原理 【数组划分】【数组分块】 这一类题会给我们一个数组&#xff0c;让我们划分区间&#xff0c;比如…

【机器学习】Nonlinear Independent Component Analysis - Aapo Hyvärinen

Linear independent component analysis (ICA) x i ( k ) ∑ j 1 n a i j s j ( k ) for all i 1 … n , k 1 … K ( ) x_i(k) \sum_{j1}^{n} a_{ij}s_j(k) \quad \text{for all } i 1 \ldots n, k 1 \ldots K \tag{} xi​(k)j1∑n​aij​sj​(k)for all i1…n,k1…K()…

VUE语法-$refs和ref属性的使用

1、$refs和ref属性的使用 1、$refs:一个包含 DOM 元素和组件实例的对象&#xff0c;通过模板引用注册。 2、ref实际上获取元素的DOM节点 3、如果需要在Vue中操作DOM我们可以通过ref和$refs这两个来实现 总结:$refs可以获取被ref属性修饰的元素的相关信息。 1.1、$refs和re…

PS_魔幻

首先打开一个背景图片 然后ctrl j复制一层背景 在调整中将图片改成黑白颜色 点击调整中的 色相/饱和度 调整明度 点击画笔工具&#xff0c;并且设置画笔模板 调节画笔大小&#xff0c;将笔记本电脑涂个概况 然后再新建色相/饱和度 勾选着色 调节背景颜色至喜欢 右键混合选项 …

04-React脚手架 集成Axios

初始化React脚手架 前期准备 1.脚手架: 用来帮助程序员快速创建一个基于xxx库的模板项目 1.包含了所有需要的配置&#xff08;语法检查、jsx编译、devServer…&#xff09;2.下载好了所有相关的依赖3.可以直接运行一个简单效果 2.react提供了一个用于创建react项目的脚手架库…

一键去水印免费网站快速无痕处理图片、视频水印

水印问题往往是一个大麻烦。即使我们只想将这些照片保留在我们的个人相册中以供怀旧&#xff0c;水印也可能像顽固的符号一样刺激我们的眼睛。为了解决这个问题&#xff0c;我们需要不断探索创新的解决方案&#xff0c;让我们深入研究一款强大的一键去水印免费网站“水印云”。…

Rust并发编程:理解线程与并发

大家好&#xff01;我是lincyang。 今天我们来深入探讨Rust中的并发编程&#xff0c;特别是线程的使用和并发的基本概念。 Rust中的线程 Rust使用线程来实现并发。线程是操作系统可以同时运行的最小指令集。在Rust中&#xff0c;创建线程非常简单&#xff0c;但与此同时&…

二叉搜索树java实现

顾名思义&#xff0c;二叉搜索树是一棵二叉树&#xff0c;每个节点就是一个对象&#xff0c;这个对象包含属性left、right和parent。left指向节点的左孩子&#xff0c;right指向节点的右孩子&#xff0c;parent指向节点的父节点&#xff08;双亲&#xff09;。如果某个孩子节点…

黑马点评笔记 redis实现缓存

文章目录 什么是缓存?为什么要使用缓存 如何使用缓存功能实现缓存模型和思路代码实现 缓存更新策略数据库缓存不一致解决方案代码实现 什么是缓存? 缓存(Cache),就是数据交换的缓冲区,俗称的缓存就是缓冲区内的数据,一般从数据库中获取,存储于本地代码(例如: 例1:Static fi…

vr小鼠虚拟解剖实验教学平台减少了受感染风险

家畜解剖实验教学是培养畜牧兽医专业学生实际操作能力的专业教学活动中的核心手段。采取新型教学方式与手段&#xff0c;合理设置实验教学内容&#xff0c;有助于激发学生的操作积极性&#xff0c;促进实践教学的改革。 家畜解剖VR仿真教学是一种借助VR虚拟现实制作和web3d开发…

常用通信接口、协议:SCCB

一、概述 SCCB(串行摄像头控制总线)是由欧姆尼图像技术公司&#xff08;OmniVision&#xff09;开发的一种类IIC的总线&#xff0c;主要用于其OV系列的图像传感器上&#xff08;但目前有很多家的图像传感器都有采用该控制总线&#xff09;。相对于IIC总线来说SCCB与之最主要的差…

java基础-集合

1、集合 在java中&#xff0c;集合&#xff08;Collection&#xff09;指的是一组数据容器&#xff0c;它可以存储多个对象&#xff0c;并且允许用户通过一些方法来访问与操作这些对象。j 集合的实现原理都基于数据结构和算法&#xff0c;如下&#xff1a; 数据结构&#xff1…

振南技术干货集:制冷设备大型IoT监测项目研发纪实(2)

注解目录 1.制冷设备的监测迫在眉睫 1.1 冷食的利润贡献 1.2 冷设监测系统的困难 &#xff08;制冷设备对于便利店为何如何重要&#xff1f;了解一下你所不知道的便利店和新零售行业。关于电力线载波通信的论战。&#xff09; 2、电路设计 2.1 防护电路 2.1.1 强电防护 …

基于JavaWeb+SSM+Vue教学辅助微信小程序系统的设计和实现

基于JavaWebSSMVue教学辅助微信小程序系统的设计和实现 源码获取入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 前言 1.1 概述 随着信息时代的快速发展&#xff0c;互联网的优势和普及&#xff0c;人们生活…

[项目管理-33/创业之路-87/管理者与领导者-127]:如何提升自己项目管理的能力和水平

目录 前言&#xff1a; 一、项目经理的角色定位 1.1 项目经理的职责 1.2 不同矩阵类型的项目&#xff0c;项目经理的职责 1.3 项目经理的角色定位 1.4 项目经理的发展路径 二、项目经理项目理论和知识结构 三、软件项目经理在计算机水平的提升 四、项目经理业务知识的…

nodejs微信小程序+python+PHP-储能电站运营管理系统的设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

七、通过libfdk_aac编解码器实现aac音频和pcm的编解码

前言 测试环境&#xff1a; ffmpeg的4.3.2自行编译版本windows环境qt5.12 AAC编码是MP3格式的后继产品&#xff0c;通常在相同的比特率下可以获得比MP3更高的声音质量&#xff0c;是iPhone、iPod、iPad、iTunes的标准音频格式。 AAC相较于MP3的改进包含&#xff1a; 更多的采…

系列八、key是弱引用,gc垃圾回收时会影响ThreadLocal正常工作吗

一、key是弱引用&#xff0c;gc垃圾回收时会影响ThreadLocal正常工作吗 到这里&#xff0c;有些小伙伴可能有疑问&#xff0c;ThreadLocalMap的key既然是 弱引用&#xff0c;那么GC时会不会贸然地把key回收掉&#xff0c;进而影响ThreadLocal的正常使用呢&#xff1f;答案是不会…