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.hqwc.cn/news/208813.html

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

相关文章

Java Spring

文章目录 SpringSpring 是什么&#xff1f;从Spring中获取Beanxml获取注解存储类注解⽅法注解bean命名规则类注解之间的关系 注解获取bean属性注⼊缺点 构造⽅法注⼊Setter 注⼊三种注⼊优缺点分析Resource&#xff1a;另⼀种注⼊关键字同⼀类型多个 Bean 报错处理 获取bean对象…

PDF转Word,1行Python代码就够了,免费用

大家好&#xff0c;这里是程序员晚枫。 今年十一假期没出去旅游&#xff0c;在家里更新一套原创课程&#xff0c;&#x1f449;给小白的《50讲Python自动化办公》。 所有功能&#xff0c;都只需要1行代码&#xff0c;非常适合非程序员入门Python使用。 目前全网播放量直逼100…

封装一个基于ThreeJS渲染基础模型的类,非常简单,可拖动可缩放

工作需求要求threeJS渲染一个模型以供可视化大屏展示&#xff0c;抛出模型精度不谈&#xff0c;只说业务实现 1.Three.JS的引入 ThreeJS官网地址:Three.js – JavaScript 3D Library 查看文档 中文切换及安装创建步骤 如果是自己研究学习用的&#xff0c;在官网安装完后&…

VScode调试没有反应

点击调试按钮后没反应 有可能是vscode中安装的python插件版本问题 可以通过重新安装比较旧一点的python尝试解决此问题 步骤如下&#xff1a; 然后从中选择比当前版本更低的版本即可 安装完成后需重启vscode

汇编-pop出栈指令

32位汇编 执行动作分为两步&#xff1a; 第一步&#xff1a;读出数据 第二步&#xff1a;改变栈地址 如果操作数是16位&#xff0c; 则ESP加2&#xff1b; 如果操作数是32位&#xff0c; 则ESP加4 espesp2 或 espesp4 格式&#xff1a;

ios qt开发要点

目前关于ios qt的开发资料比较少&#xff0c;这里整理了几个比较重要的开发要点&#xff0c;基于MacOS14 Xcode15 Qt15.5 cmake iphone真机。 cmake报错&#xff0c;报错信息如下 CMake Error at /Users/user/Qt/5.15.5/ios/lib/cmake/Qt5Core/Qt5CoreConfig.cmake:91 (m…

opencv-直方图

直方图是一种对图像亮度分布的统计表示&#xff0c;它显示了图像中每个灰度级别的像素数量。在OpenCV中&#xff0c;你可以使用cv2.calcHist() 函数计算直方图。 以下是一个简单的示例&#xff0c;演示如何计算和绘制图像的直方图&#xff1a; import cv2 import numpy as np …

for 循环变量的声明方式

获取字符串中的第一个单词&#xff0c;for 循环中的 &value 声明比较特殊&#xff0c;结合图1编译器的提示&#xff0c;value 是一个 u8 类型。 fn get_first_world(s: &str) -> &str {let bytes s.as_bytes();for (i, &value) in bytes.iter().enumerate…

Arthas 监听 Docker 部署的java项目CPU占比高的信息

1、Linux上安装Arthas wget https://alibaba.github.io/arthas/arthas-boot.jar2、docker ps 查看目标项目的容器ID 3、copy Arthas 到目标容器中 (注意有 &#x1f615; ) docker cp arthas-boot.jar d97e8666666:/4、进入到目标容器目录中 docker exec -it d97e8666666 /b…

【VScode】安装配置、插件及远程SSH连接

一、VSCode安装 二、配置安装插件 三、配置远程连接SSH 四、MinGW 一、VSCode安装 VS官网 Visual Studio Code - Code Editing. Redefined下载安装包&#xff1a; 二、配置安装插件 安装中文插件 配置字体为20 配置文件–>首选项->设置->Font Size为20 设置 VSC…

git stash 用法总结

目录 1&#xff0c;介绍场景1&#xff1a;场景2&#xff1a; 2&#xff0c;常用命令2.1&#xff0c;基础2.2&#xff0c;进阶1&#xff0c;存储时指定备注2&#xff0c;通过索引来操作指定的存储3&#xff0c;修改存储规则 2.3&#xff0c;查看 stash 修改的具体内容 1&#xf…

洛谷 P4552 [Poetize6] IncDec Sequence

挺好的一道思维题。 分析 因为是对区间修改&#xff0c;多次修改肯定会超时&#xff0c;很容易想到差分。 那么原题的对区间修改就可以转换为下面三个操作&#xff08;均在差分数组中&#xff09;&#xff1a; 1. 任选一个数1 2. 任选一个数-1 3. 任选两个数1和-1 进一步考…