日志框架 --- Log4j

news2024/12/27 23:21:30

文章目录

  • 1. 什么是log4j
  • 2. log4j的日志级别
  • 3. 日志层级
  • 4. log4j使用实例
    • 4.1 添加log4j依赖
    • 4.2 添加配置文件
    • 4.3 编写代码
    • 4.4 测试代码
    • 4.5 运行结果
  • 5. 配置文件
    • 5.1 Logger 日志记录器
    • 5.2 Appender 附加器
    • 5.3 Layout 日志格式化器
  • 6. 整体演示
    • 6.1 配置文件
    • 6.2 运行结果

1. 什么是log4j

log4j是一个流行的Java日志框架,是由 Apache 的一个开源项目。它允许开发人员通过将日志语句插入应用程序代码中来记录应用程序运行时的事件。它能够控制通过哪些目标输出的消息以及每个目标的格式。

log4j主要是由 Logger,Appender,Layout 组成,
Logger,日志记录器,控制日志的输出级别以及是否输出日志。
Appender,控制日志被写入的位置,例如控制台、文件等。
Layout,用于定义日志输出的格式。

2. log4j的日志级别

Log4j有六个日志级别,分别是:TRACEDEBUGINFOWARNERRORFATAL
日志优先级为:TRACE<DEBUG<INFO<WARN<ERROR<FATAL

3. 日志层级

这里的日志层级和logback一样,根都是root,如果创建com.example.test, 根就是root,然后是com,再是example,最后就是test。这里的日志级别如果没有指定,也会继承父类。
在这里插入图片描述

4. log4j使用实例

4.1 添加log4j依赖

        <!-- https://mvnrepository.com/artifact/log4j/log4j -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

4.2 添加配置文件

在src/main/resources目录下,创建log4j.properties文件,编写下面代码。

log4j.rootLogger=DEBUG, 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{ABSOLUTE} %5p %c{1}:%L - %m%n

4.3 编写代码


import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;

public class Log4jTest {
    private static final Logger logger = Logger.getLogger(Log4jTest.class);

    public void test() {
        logger.trace("===TRACE===");
        logger.debug("===DEBUG===");
        logger.info("===INFO===");
        logger.warn("===WARN===");
        logger.error("===ERROR===");
        logger.fatal("===FATAL===");
    }
}

4.4 测试代码


@SpringBootTest
class Log4jApplicationTests {

    @Resource
    private Log4jTest log4jTest;
    @Test
    void test() {
        log4jTest.test();
    }

}

4.5 运行结果

在这里插入图片描述

5. 配置文件

5.1 Logger 日志记录器

一般会设置根路径的日志级别使用 rootLogger 设置。也可以指定需要的包或者类设置一个 Logger。
使用示例:

# 定义根logger级别
log4j.rootLogger=DEBUG, stdout
# 定义指定路径logger级别
log4j.logger.com.example.log4j.test.Log4jTest=INFO, CONSOLE

5.2 Appender 附加器

appender用来控制日志信息输出的位置,部分可选项如下表格。

选项作用
ConsoleAppender将日志信息输出到控制台上
FileAppender将日志信息输出到文件中
RollingFileAppender基于文件大小或日期滚动生成新的日志文件,并将日志输出到这些文件中。
SocketAppender将日志信息输出到远程服务器的Socket端口
DBAppender将日志信息写入数据库中

使用示例:

# 定义名为CONSOLE的appender(输出到控制台)
log4j.appender.console=org.apache.log4j.ConsoleAppender

# 定义名为file的appender(输出到文件中)
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=E:/workspace/logfile.txt
log4j.appender.file.encoding=UTF-8

# 定义名为rollingfile的appender(滚动的输出到文件中)
log4j.appender.rollingfile=org.apache.log4j.RollingFileAppender
log4j.appender.rollingfile.File=E:/workspace/logrollingfile.txt
log4j.appender.rollingfile.encoding=UTF-8
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=10

5.3 Layout 日志格式化器

用于控制输出日志的格式,和logback的pattern类似。

选项作用
SimpleLayout简单布局,输出包括级别和消息。
PatternLayout模式布局,允许你定义自己的输出格式,通过使用占位符指定输出内容的相对位置。
HTMLLayoutHTML布局,以HTML格式输出日志消息。
XMLLayoutXML布局,以XML格式输出日志消息。
TTCCLayout时间、线程、类别和内容布局,输出包括时间戳、线程名、日志器名称和消息。
EnhancedPatternLayout增强模式布局,与PatternLayout类似,但支持更多的占位符。

使用示例:

# 自定义输出格式
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{HH:mm:ss.SSS} - %m%n

# HTML布局
log4j.appender.file.layout=org.apache.log4j.HTMLLayout

# 简单布局
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout

一些自定义输出格式

样式作用
%m输出代码中指定的日志信息
%p输出优先级,及 DEBUG、INFO 等
%n换行符
%r输出自应用启动到输出该 log 信息耗费的毫秒数
%c输出打印语句所属的类的全名
%t输出产生该日志的线程全名
%d输出服务器当前时间,默认格式为 ISO8601,也可以在后面指定格式。如:%d{yyyy年MM月dd日 HH:mm:ss}
%l输出日志时间发生的位置,包括类名、发生的线程,以及在代码中的行数,如:Test.main(Test.java:10)
%F输出日志消息产生时所在的文件名称
%L输出代码中的行号

6. 整体演示

6.1 配置文件

# 定义根logger级别
log4j.rootLogger=DEBUG, stdout
# 定义指定路径logger级别
log4j.logger.com.example.log4j.test.Log4jTest=INFO, console , file, rollingfile, stdout
# 设置不向上级传递
log4j.additivity.com.example.log4j.test.Log4jTest=false 

# 定义名为CONSOLE的appender(输出到控制台)
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{HH:mm:ss.SSS} - %m%n

# 定义名为file的appender(输出到文件中)
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=E:/workspace/logfile.html
log4j.appender.file.encoding=UTF-8
log4j.appender.file.layout=org.apache.log4j.HTMLLayout


# 定义名为rollingfile的appender(滚动的输出到文件中)
log4j.appender.rollingfile=org.apache.log4j.RollingFileAppender
log4j.appender.rollingfile.File=E:/workspace/logrollingfile.html
log4j.appender.rollingfile.encoding=UTF-8
log4j.appender.rollingfile.MaxFileSize=10MB
log4j.appender.rollingfile.MaxBackupIndex=10
log4j.appender.rollingfile.layout=org.apache.log4j.HTMLLayout

# 定义名为stdout的appender(输出到控制台)
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout

6.2 运行结果

带有时间的就是自定义的输出格式,另一种就是简单布局的格式。

在这里插入图片描述

这是生成的两个日志文件

在这里插入图片描述

这是文件中的内容
在这里插入图片描述

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

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

相关文章

Linux学习(四)Docker构建Python_Web环境

目录 Docker 安装Docker 使用Docker 启停Docker 换源Docker 镜像Docker 容器Docker 创建内部网段Docker Python 镜像创建Docker MySQL 镜像创建Docker 补充 Docker 是一个开源的应用容器引擎&#xff0c;Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器…

vulnhub靶场渗透之DC-4渗透教程(超级详细)

vulnhub靶场渗透之DC-4渗透教程目录 0x01靶机概述 0x02靶场环境搭建 0x03靶机信息发现 0x04靶机渗透过程 0x05靶机提权 0x06渗透实验总结 0x01靶机概述 靶机基本信息&#xff1a; 靶机下载链接https://download.vulnhub.com/dc/DC-4.zip作者DCAU发布日期2019年4月…

DINO代码学习笔记(二)

在DINO代码学习笔记&#xff08;一&#xff09;中已经将输入transformer之前的参数处理给捋了一遍&#xff0c;接下就是将这些参数传给transformer。 DINO的transformer使用了Deformable-DETR中的可变性transformer&#xff08;他们之前的工作也有用到&#xff09; 这里还是使用…

chatgpt赋能python:Python回滚-避免代码灾难的有效措施

Python回滚-避免代码灾难的有效措施 什么是Python回滚 Python回滚是一种避免代码灾难的有效措施&#xff0c;它可以让你在代码出现问题之后及时回退到之前的版本&#xff0c;保证系统不会受到影响。 回滚是一项非常重要的工作&#xff0c;越是复杂的项目越需要进行回滚。Pyt…

​【指针与数组的恩怨情仇】

指针和数组的关系 指针指的是指针变量&#xff0c;不是数组&#xff0c;指针变量的大小是4/8个字节&#xff0c;是专门来存放地址的。数组也不是指针&#xff0c;数组是一块连续的空间&#xff0c;存放一组相同类型的数据的。 没有关系&#xff0c;但是它们之间有比较相似的地方…

java String类型对象转换为自定义类型对象

问题 java String类型对象转换为自定义类型对象 详细问题 对于java自定义类型对象提供了toString()方法&#xff0c;实现自定义类型对象转换为String类型对象&#xff0c;如何将String类型对象转换为自定义类型对象&#xff0c;譬如对于如下代码所定义的Class类 package co…

Android:Selector + Layer-lists 实现 AppCompatCheckBox

最近做项目涉及到一些UI相关的东东&#xff0c;虽然比较简单&#xff0c;但是也很有趣&#xff0c;写两篇简短的博客记录一下。 一."Selector 两张图片"实现 AppCompatCheckBox AppCompatCheckBox 是 androidx的一个widget&#xff1a;androidx.appcompat.widget.…

chatgpt赋能python:Python图中打字的SEO文章:让你的图片说出更多的话

Python图中打字的SEO文章&#xff1a;让你的图片说出更多的话 图片是传达信息的有力工具。不过&#xff0c;当你在网站上发布图片的时候&#xff0c;这张图片就很可能会被浏览器、机器学习算法、甚至是一些视觉障碍用户忽略。为了弥补这个缺陷&#xff0c;我们可以使用Python来…

chatgpt赋能python:Python回退快捷键:让你的编程更迅速高效

Python回退快捷键&#xff1a;让你的编程更迅速高效 作为一名有10年Python编程经验的工程师&#xff0c;我深知Python回退快捷键对于编程的重要性。当你在编写代码时&#xff0c;可能会出现需要回退或者修改之前的代码的情况&#xff0c;在这种情况下&#xff0c;如果你没有使…

用代码认识整型提升与unsigned signed

&#x1f929;本文作者&#xff1a;大家好&#xff0c;我是paperjie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 &#x1f970;内容专栏&#xff1a;这里是《C语言》专栏&#xff0c;笔者用重金(时间和精力)打造&#xff0c;基础知识一网打尽&#xff0c;希望可以…

[架构之路-206]- 常见的需求分析技术:UML图概览

UML&#xff08;Unified Modeling Language&#xff09;是一种统一建模语言&#xff0c;为面向对象开发系统的产品进行说明、可视化、和编制文档的一种标准语言。下面将对UML的九种图包图的基本概念进行介绍以及各个图的使用场景。 一、基本概念   如下图所示&#xff0c;U…

3. 响应状态码及Response对象的status_code属性

3. 响应状态码及Response对象的status_code属性 文章目录 3. 响应状态码及Response对象的status_code属性1. 响应状态码2. 响应状态码共分为5种类型2.1 1xx&#xff08;临时响应&#xff09;2.2 2xx &#xff08;成功&#xff09;2.3 3xx &#xff08;重定向&#xff09;2.4 4x…

一个小时入门 Android Compose 动画

0. 前言 前段时间对于Android中的Compose动画做了系统性的学习&#xff0c;相关文章发布在 Compose 动画 专栏里。系统性学完Compose动画后&#xff0c;又对此做了系统性的回顾&#xff0c;抽取其比较重要的部分&#xff0c;希望能帮助大家快速入门Compose动画&#xff0c;所…

6. JVM调优工具详解及调优实战

JVM性能调优 1. 前置启动程序1.1 Jmap1.1.1 Jmap查询内存信息1.1.2 Jmap查询堆信息1.1.3 jmap查询堆内存dump 1.2 Jstack1.3 远程连接jvisualvm 本文是按照自己的理解进行笔记总结&#xff0c;如有不正确的地方&#xff0c;还望大佬多多指点纠正&#xff0c;勿喷。 课程内容&am…

Postman工具使用

Postman 是什么 Postman 是一款 API 开发协作工具&#xff0c;它可以帮助你测试和开发 API&#xff0c;Postman 提供了测试 API 的友好界面和功能&#xff0c;使用简单便捷&#xff0c;安全可靠。Postman 是每一位前后端开发者必掌握的开发工具。 如何安装 Postman 官网安装…

【Linux】Apache 网页安全优化与日志分割

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 Apache 网页安全优化与日志分割 一、网页安全优化1.Apache 网页压缩2.Apache 网页缓存3.Apache 隐藏版本信息4.Apache 防盗链 二、rotatelogs 分割1.修改apache服务的主配置文…

chatgpt赋能python:Python图片保存及优化SEO的方法

Python图片保存及优化SEO的方法 对于一个网站&#xff0c;图片占据了网页中的很大一部分&#xff0c;因此如何在保证图片质量不失真的情况下&#xff0c;保证网页加载速度的快速呈现&#xff0c;是很多网站开发者需要考虑的一点。 在使用Python进行网站开发时&#xff0c;如何…

git基础教程(18)git stash暂存本地修改

文章目录 git stash pushgit stash listgit stash popgit stash applygit stash showgit stash drop 序号git stash cleargit stash pop冲突解决git stash 命令是 Git 中一个非常实用的命令,它可以让开发者暂时存储当前工作区的内容而不必提交代码或创建新分支,得到一个干净的…

Redisson分布式锁使用

一、使用 RedisTemplate 操作分布式锁 原子加锁&#xff08;uuid Value过期时间&#xff09;原子解锁(lua脚本)加长过期时间 UUID &#xff1a;让锁区分&#xff0c;防止错删其他锁设置锁过期时间&#xff1a;当业务异常导致无法释放锁形成锁死&#xff0c;设置过期时间自动释…

【机器学习】集成学习(实战)

集成学习&#xff08;实战&#xff09; 目录 一、准备工作&#xff08;设置 jupyter notebook 中的字体大小样式等&#xff09;二、集成算法的基本思想三、集成算法的简单实现&#xff1a;硬投票与软投票1、构建测试数据集2、硬投票3、软投票 四、集成学习&#xff1a;Bagging …