用Log4j 2记录日志
说明
maven工程中增加对Log4j 2的依赖
下面代码示例的maven工程中的pom.xml文件中需要增加对Log4j 2的依赖:
<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.20.0</version></dependency>
log4j 2的配置
配置说明参考文档
https://logging.apache.org/log4j/2.x/manual/configuration.html
配置文件中pattern的详细说明
例如,下面配置文件片段中用到了pattern:
<Appenders><Console name="Console" target="SYSTEM_OUT"><PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/></Console><File name="File1" fileName="${filename}"><PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/></File></Appenders>
pattern的详细说明请参考:
https://logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout

通常给每个类创建自己的Logger
为了便于对日志的过滤、搜索、排序等,通常每个类都获取它自己的带名字的Logger,而不是所有类共用一个Logger。
例如通常的做法:
private static final Logger logger = LogManager.getLogger();
创建一个Logger ,名字就是调用类的全限定名。
建议将Logger 声明为static的
Logger 可以声明为static的、或者非static的,但建议声明为static的。这样做的目的是为了节约实例化的成本。
代码示例
代码示例公共说明
如果没有特别说明,下面代码示例中maven工程中src/main/resources/log4j2.xml的配置内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN"><Appenders><Console name="Console" target="SYSTEM_OUT"><PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/></Console><File name="File1" fileName="${filename}"><PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/></File></Appenders><Loggers><Root level="info"><AppenderRef ref="Console"/></Root></Loggers>
</Configuration>
用LogManager.ROOT_LOGGER_NAME获取root Logger的名字
LogManager.ROOT_LOGGER_NAME是root Logger的名字,这个名字是空字符串""。
package com.thb;import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;public class Test {public static Logger logger = LogManager.getLogger();public static void main(String[] args) {System.out.println("root logger name: " + LogManager.ROOT_LOGGER_NAME);//System.out.println("logger name: " + logger.getName()); }}
运行结果:

从上面输出结果可以发现,root Logger的名字是空字符串""。
用LogManager的getLogger()获取一个带名字的Logger
LogManager.getLogger()返回一个带名字的Logger,这个Logger的名字就是调用的类的全限定名称。这个方法经常使用。
下面代码中获取Logger的方法是典型的获取方法。
package com.thb;import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;public class Test {private static final Logger logger = LogManager.getLogger();public static void main(String[] args) { System.out.println("logger name: " + logger.getName()); }}
运行输出:

从上面输出可以看出,Logger的名字是调用类的全限定名称,此处是com.thb.Test。
在控制台打印一条INFO级别的日志
打印日志的代码:
package com.thb;import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;public class Test {private static final Logger logger = LogManager.getLogger();public static void main(String[] args) { System.out.println("logger name: " + logger.getName()); logger.info("hello");}}
输出:

在控制台打印日志,信息为合成信息
package com.thb;import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;public class Test {private static final Logger logger = LogManager.getLogger();public static void main(String[] args) {double r = 2;logger.info("面积为:" + Math.PI * Math.pow(r, 2));}}
运行输出:
15:25:00.167 [main] INFO com.thb.Test - 面积为:12.566370614359172
两个类都定义了静态的Logger,并且在一个类中调用另外一个类的方法
定义一个类,类中定义了自己的静态Logger:
package com.thb;import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;public class AnotherClass {private static final Logger logger = LogManager.getLogger();public void method() {logger.info("hello from AnotherClass");}
}
定义一个主类,在主类中也定义了一个静态Logger:
package com.thb;import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;public class Test {private static final Logger logger = LogManager.getLogger();public static void main(String[] args) { logger.info("hello from Test");AnotherClass another = new AnotherClass();another.method();}}
运行结果:
15:10:28.161 [main] INFO com.thb.Test - hello from Test
15:10:28.199 [main] INFO com.thb.AnotherClass - hello from AnotherClass
相关文章:
用Log4j 2记录日志
说明 maven工程中增加对Log4j 2的依赖 下面代码示例的maven工程中的pom.xml文件中需要增加对Log4j 2的依赖: <dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.20.0&…...
【Java面试】Paxos和Raft协议的区别?
面试官:你简历上说了解Paxos和Raft协议,说一下你对这两个协议的了解? 我:Paxos算法和Raft算法都是用于实现分布式系统中的一致性的算法,确保不同节点之间的数据一致。 我:Paxos算法它的目标是使多个节点能…...
手机浏览器H5打开微信小程序支付,自定义传参
微信官方提供的开放文档如下: 静态网站 H5 跳小程序 | 微信开放文档 想必大家都能看懂官网提供的文档,但实战时却遇到很多问题,博主总结一下遇到的坑,如果您也有遇到,希望可以帮到您。 1.小程序已经发布上线了&…...
Aligning Large Language Models with Human: A Survey
本文也是LLM相关的综述文章,针对《Aligning Large Language Models with Human: A Survey》的翻译。 对齐人类与大语言模型:综述 摘要1 引言2 对齐数据收集2.1 来自人类的指令2.1.1 NLP基准2.1.2 人工构造指令 2.2 来自强大LLM的指令2.2.1 自指令2.2.2 …...
windows图标白了,刷新图标
1.进入C盘,user(用户文件夹),进入当前用户文件夹,再进入隐藏文件夹(AppDada),最后进入Local 2.删除Local文件夹里的IconCache.db文件 3.重启资源管理器 -------------------------------------------- 或者创建bat文件…...
C++ 左值和右值
C 左值和右值 左值、右值左值引用、右值引用std::move()std::move()的实现引用折叠 完美转发forward()的实现函数返回值是左值还是右值如何判断一个值是左值还是右值 左值、右值 在C11中所有的值必属于左值、右值两者之一,右值又可以细分为纯右值、将亡值。在C11中…...
c++学习(智能指针)[29]
RALL RALL(Resource Acquisition Is Initialization)是一种 C 的编程技术,用于管理资源的获取和释放。它的基本思想是在对象的构造函数中获取资源,在对象的析构函数中释放资源,从而确保资源的正确获取和释放。 RALL 的…...
B站高播放又涨粉的带货UP主怎么做?
飞瓜数据(B站版)上线新功能【带货达人榜】,由榜单显示,B站7月带货达人中,平均播放量最高的是UP主下个月一定中100万。 带货视频仅1支,播放量已经高达679万,值得一提的是,6月他也是带…...
AD21 PCB设计的高级应用(四)FPGA的管脚交换功能
(四)FPGA的管脚交换功能 高速 PCB 设计过程中,涉及的 FPGA等可编程器件管脚繁多,也因此导致布线的烦琐与困难,Altium Designer 可实现 PCB 中 FPGA 的管脚交换,方便走线。 1.FPGA管脚交换的要求 (1)一般情况下,相同电压的 Bank之…...
超低功耗LCD段码屏驱动显示芯片VK1621原厂芯片
型 号:VK1621 / 品 牌:VINKA/永嘉微电 最新年份 VK1621 是一个324的LCD驱动器,可软体程式控制使其适用于多样化的LCD应用线路,仅用到3至4条信号线便可控制LCD驱动器,除此之外也可介由指令使其進入省电模式 M1855 …...
【深入探索Docker】:开启容器化时代的技术奇迹
深入探索Docker 深入探索Docker:开启容器化时代的技术奇迹前言1. 容器化:实现快速部署和可移植性2. 虚拟化:提高安全性和可靠性3. 映像:打包应用及依赖项的模板4. 网络管理:连接容器和主机5. 持久化数据:保…...
【Ajax】笔记-JQuery发送jsonp请求
前端 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>jQuery-jsonp</title><style>#re…...
docker更换数据存储路径
1. 先停掉docker服务 sudo systemctl stop docker 可能会出现的问题: 这样会导致docker关闭失败,解决办法:systemctl stop docker.socket 确保docker关闭: 2.备份现在的 Docker 数据存储目录 /var/lib/docker(默认路径) mv /var/lib/docker /var/lib/…...
GPT告诉你如何延长周末体验
对于常常感到疲劳的打工人和学生党,过周末需要找到一种平衡,既能够休息放松,又能够提升身心能量。以下是一些建议,希望对你有所帮助: 制定休息计划:在周末前,制定一个休息计划,明确…...
一百四十一、Kettle——kettle8.2在Windows本地开启carte服务以及配置子服务器
一、目的 在kettle建好共享资源库后,为了给在服务器上部署kettle的carte服务躺雷,先在Windows本地测试一下怎么玩carte服务 二、Kettle版本以及在Windows本地安装路径 kettle版本是8.2 pdi-ce-8.2.0.0-342 kettle本地安装路径是D:\j…...
你知道充电桩控制主板的结构吗?
你知道充电桩控制主板的结构吗? 你是否曾经遇到过电动车行驶途中突然没电的情况?不用担心,解决这个问题的方法之一就是使用充电桩。那么,控制主板是如何控制充电桩的呢?让我们一起来探究一下。 充电桩控制主板由多种元件组成,包括主控芯片…...
LeetCode 25题:K个一组翻转链表
题目: 给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 你不能只是单纯…...
Day 19 C++ 文件操作
C 文件操作 文件为什么要使用文件文件类型文本文件 - 文件以文本的ASCII码形式存储在计算机中二进制文件 - 文件以文本的二进制形式存储在计算机中 操作类型ofstream:写操作ifstream: 读操作fstream : 读写操作 文本文件写文件引入头文件 \&l…...
Nginx源码安装
文章目录 Nginx源码安装注安装pcre库安装openssl库创建用户及用户组安装编译环境解压文件检测环境重要目录检查配置服务启动脚本查看效果: Nginx源码安装 注 本实验基于RHEL73.10.0-327.el7.x86_64,尽量使用RHEL7或CentOS7。 安装pcre库 安装 pere 库…...
【数据结构和算法】--N叉树返回根节点到目标节点的路径
目录 一、前言二、Java代码实现 一、前言 项目中接触一个问题:在大量有父子关系的列表中,需要筛选出特定约束的数据【要求某个目标节点延续到根节点的数据】。这个问题抽象为数据结构,就是:N叉树返回根节点到目标节点的路径 二、…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...
如何在Windows本机安装Python并确保与Python.NET兼容
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
