三步入门Log4J 的使用

本篇基于Maven 的Project项目, 快速演示Log4j 的导入和演示。

第一步: 导入Log4j依赖

		<dependency>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-api</artifactId>
			<version>2.24.2</version>
		</dependency>
		<dependency>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-core</artifactId>
			<version>2.24.2</version>
		</dependency>

些API来记录日志信息。log4j-api的主要作用包括:

  1. 提供日志记录接口:log4j-api定义了一系列用于日志记录的接口和类,如Logger、LogManager等,这些接口和类为开发人员提供了记录日志的标准方法。
  2. 支持多种日志格式:log4j-api支持使用不同的日志格式来记录日志信息,如纯文本、JSON、XML等,这可以根据应用程序的需求进行配置。
  3. 与日志实现分离:log4j-api的设计使得它与具体的日志实现层(如log4j-core)分离,这样开发人员可以在不改变代码的情况下更换日志实现层,提高了代码的灵活性和可维护性。
  4. 支持Lambda表达式:在Java 8及以上版本中,log4j-api支持使用Lambda表达式来延迟评估日志消息,这可以减少不必要的日志消息构建成本,提高性能。

log4j-core的作用

log4j-core是Apache Log4j日志框架的具体实现层,它负责将日志信息输出到指定的目的地,如控制台、文件、数据库等。log4j-core的主要作用包括:

  1. 日志信息的输出:log4j-core根据log4j-api提供的日志记录请求,将日志信息输出到配置的目的地。
  2. 日志级别的过滤:log4j-core支持根据日志级别(如DEBUG、INFO、WARN、ERROR等)来过滤日志信息,只输出符合条件的日志信息。
  3. 日志格式的配置:log4j-core允许开发人员配置日志信息的格式,包括日志的布局、时间戳、日志级别、线程信息等,以满足不同的需求。
  4. 支持异步日志记录:log4j-core提供了异步日志记录的功能,可以提高日志记录的性能,特别是在多线程应用程序中。
  5. 动态配置和管理:log4j-core支持在运行时动态地修改日志配置,如更改日志级别、添加或删除输出目的地等,这使得开发人员可以在不重启应用程序的情况下调整日志记录行为。

第二步: 配置Log4j配置文件, 在src/main/resources 下新增log4j2.xml文件,

内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn">
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %l - %msg%n"/>
    </Console>
  </Appenders>
  
  <Loggers>
    <Root level="INFO" additivity="true">
      <AppenderRef ref="Console"/>
    </Root>
  </Loggers>
</Configuration>
  • 配置文件名是log4j2.xml, 因为目前使用的基本上都是 Log4j的 2.X版本。
  • <Configuration>元素是Log4j配置文件的根元素。status="warn"属性意味着Log4j将在内部使用WARN级别的日志记录来报告其自己的初始化过程中的问题。这有助于调试配置问题。* <Appenders>元素包含了所有日志输出目的地的定义。在这个例子中,只有一个输出目的地被定义。
  • <Console>元素定义了一个控制台输出(Appender)。name="Console"属性给这个Appender起了一个名字,target="SYSTEM_OUT"属性指定了日志将输出到标准输出流(即控制台)。
  • <PatternLayout>元素定义了日志消息的格式。pattern属性定义了具体的格式字符串,其中:
    • %-5level:日志级别,左对齐,最小宽度为5。
    • %d{yyyy-MM-dd HH:mm:ss.SSS}:日志事件的日期和时间,格式为年-月-日 时:分:秒.毫秒。
    • %l:发出日志事件的记录器的名称。
    • %msg:日志消息。
    • %n:平台相关的换行符。
  • <Loggers>元素包含了所有日志记录器(Loggers)的定义。
  • <Root>元素定义了根日志记录器。所有的日志记录器都继承自根记录器,除非另有指定。
  • level="INFO"属性设置了根记录器的日志级别为INFO,这意味着只有INFO级别及以上(WARN, ERROR, FATAL)的日志消息会被处理。
  • additivity="true"属性意味着这个记录器的日志消息除了被这个记录器的Appender处理外,还会被它的父记录器的Appender处理(在这个配置中,由于它是根记录器,这个属性实际上没有实际效果)。
  • <AppenderRef ref="Console"/>元素引用了一个Appender(在这个例子中,是之前定义的Console Appender),意味着这个记录器的日志消息将被输出到控制台。

第二步:测试, 调用日志相关的接口记录日志

public class Log4jDemo {

    private static Logger logger = LogManager.getLogger(Log4jDemo.class);
    /**
     * @param args
     */
    public static void main(String[] args) { 
        logger.debug("调试信息");
        logger.info("一般信息");
        logger.error("错误信息");
    }

}

在VS Code中的运行结果如下:

在这里插入图片描述

因为上面的配置是输出到控制台,且日志的级别是INFO, 所以info() 和errot() 的信息会输出在控制台中。



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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis 基础、Redis 应用

Redis 基础 什么是 Redis&#xff1f; Redis &#xff08;REmote DIctionary Server&#xff09;是一个基于 C 语言开发的开源 NoSQL 数据库&#xff08;BSD 许可&#xff09;。与传统数据库不同的是&#xff0c;Redis 的数据是保存在内存中的&#xff08;内存数据库&#xf…

3D数据大屏实现过程,使用echarts、Next.js

&#x1f4dc; 本文主要内容 数据大屏自适应方案动效 echarts&#xff1a; 3D 立体柱状图动态流光折线图 3D 地球&#xff08;飞线、柱状图&#xff09;无限滚动列表 &#x1f50d; 大屏效果 数据大屏&#xff1a; 点击预览 &#x1f579; 运行条件 next 12.3.4echarts 5.4…

标贝科技受邀出席2024东湖国际人工智能高峰论坛并入选数据要素合作伙伴名单

近日&#xff0c;备受瞩目的2024东湖国际人工智能高峰论坛在中国光谷科技会展中心隆重召开。会议以“智联世界&#xff0c;共创未来”为主题&#xff0c;省市相关单位、专家学者、产学研各界百余家联合体单位齐聚一堂&#xff0c;共话人工智能领域的最新技术及产业发展趋势。会…

unity与android拓展

一.AndroidStudio打包 1.通过Unity导出Android Studio能够打开的工程 步骤 1.设置导出基本信息&#xff1a;公司名、游戏名、图标、包名等关键信息 2.在File——>Build Settings中&#xff0c;勾选 Export Project 选项 3.点击Export 导出按钮 2.在Android Studio中打开Un…

linux通过fork()和execve()调用其他程序在子线程中运行

fork()的的使用见上一期 linux C fork()和系统调用文件-CSDN博客 简单说一下fork的作用就是创造一个子进程和当前进程一起执行下面的代码 pid_t fork(void) execve的作用为&#xff1a;让当前进程内容销毁大部分&#xff0c;重新执行一个程序 int execve (const char *__path…

整数benders分解算法

benders分解是将问题分为限制主问题和子问题&#xff0c;然后主问题向子问题传入变量&#xff0c;接着根据子问题求解的信息向主问题返回割&#xff08;最优割和可行割&#xff09;&#xff0c;这些割以约束的形式被添加到主问题中。其中&#xff0c;子问题因为求解得到的解是可…

Unity之(多语言)Localization本地化工具

一、安装和配置 Localization Localization是Unity基于对多种语言和区域变体所设计的一个本地化工具&#xff0c;常用与切换多国语言时文本、图片的动态替换。 1.安装Localization插件 Window—> Package Manager&#xff0c;打开Package Manager面板 Packages选择Unity Re…

使用Mac下载MySQL修改密码第一篇_数据库

Mac下载MySQL MySQL官网链接MySQL​​​​​​ 当进入到官网后下滑到community社区&#xff0c;进行下载 然后选择community sever下载 这里就是要下载的界面&#xff0c;如果需要下载之前版本的话可以点击archives&#xff0c; 可能会因为这是外网原因&#xff0c;有时候下…

服务器数据恢复—EVA存储硬盘磁头和盘片损坏离线的数据恢复案例

服务器存储数据恢复环境&故障&#xff1a; 一台HP EVA存储中有23块硬盘&#xff0c;挂接到一台windows server操作系统的服务器。 EVA存储上有三个硬盘指示灯亮黄灯&#xff0c;此刻存储还能正常使用。管理员在更换硬盘的过程中&#xff0c;又出现一块硬盘对应的指示灯亮黄…

Linux 网络基础

文章目录 1. 计算机网络背景2. 协议2.1 OSI七层模型2.2 为什么要有TCP/IP协议&#xff1f; 3. 协议与操作系统的关系4. 网络传输基本流程4.1 局域网通信原理4.2 局域网通信流程4.3 跨网络通信流程 5. Socket编程预备知识5.1 端口号5.2 网络字节序5.3 socket编程接口 6. 网络命令…

一站式指导:在Neo4j与PostgreSQL间实现高效数据同步

作者&#xff1a;后端小肥肠 &#x1f347; 我写过的文章中的相关代码放到了gitee&#xff0c;地址&#xff1a;xfc-fdw-cloud: 公共解决方案 &#x1f34a; 有疑问可私信或评论区联系我。 &#x1f951; 创作不易未经允许严禁转载。 姊妹篇&#xff1a; 数据同步的艺术&#…

AI一键生成原创圣诞印花图案

一、引言 随着科技的飞速发展&#xff0c;AI 已经深入到我们生活和工作的各个角落&#xff0c;为创意设计领域带来了前所未有的变革。在圣诞即将来临之际&#xff0c;想要设计独特的圣诞印花图案却又担心缺乏灵感或专业技能&#xff1f;别担心&#xff0c;千鹿 AI 为我们提供了…

视频 的 音频通道提取 以及 视频转URL 的在线工具!

视频 的 音频通道提取 以及 视频转URL 的在线工具&#xff01; 工具地址: https://www.lingyuzhao.top/toolsPage/VideoTo.html 它提供了便捷的方法来处理视频文件&#xff0c;具体来说是帮助用户从视频中提取音频轨道&#xff0c;并将视频转换为可以通过网络访问的URL链接。无…

图片的懒加载

目录 懒加载的来源 事件监听 IntersectionObserver 懒加载的来源 图片的来加载其实就是延迟加载&#xff0c;我们知道浏览器的可视范围是有限的&#xff0c;现在网页的内容越来越丰富&#xff0c;一般网页的内容都是需要滚动才能完成浏览 如果网页有很多图片&#xff0c;然…

【每日刷题】Day162

【每日刷题】Day162 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 3302. 字典序最小的合法序列 - 力扣&#xff08;LeetCode&#xff09; 2. 44. 通配符匹配 - 力扣&…

Hadoop生态圈框架部署 伪集群版(四)- Zookeeper单机部署

文章目录 前言一、Zookeeper单机部署&#xff08;手动部署&#xff09;1. 下载Zookeeper安装包到Linux2. 解压zookeeper安装包3. 配置zookeeper配置文件4. 配置Zookeeper系统环境变量5. 启动Zookeeper6. 停止Zookeeper在这里插入图片描述 注意 前言 本文将详细介绍Zookeeper的…

捷联惯导原理和算法预备知识

原理和算法预备知识 牛顿第一运动定律-惯性定律&#xff1a;如一物体不受外力作用&#xff0c;它将保持静止状态或匀速直线运动状态不变。 牛顿第二运动定律&#xff1a;表达式为Fma,。其中F为物体所受的合力&#xff0c;m为物体的质量&#xff0c;a为物体的加速度。这个公式…

工业—使用Flink处理Kafka中的数据_ChangeRecord1

使用 Flink 消费 Kafka 中 ChangeRecord 主题的数据,当某设备 30 秒状态连续为 “ 预警 ” ,输出预警 信息。当前预警信息输出后,最近30

简单注册器

简单注册器 还是想查壳 发现这是apx文件 放入JEB里进行反编译 在JEB里使用快捷键Tab 可以反编译 转化成java语言 我们在搜索一下字符串flag 得到了下面这一串字符串 这里他对这串字符串进行了一系列的加密算法 img src"C:\Users\22069\Pictures\Screenshots\屏幕截图 20…

MySQL两阶段提交目的

阶段提交的过程 事务执行阶段&#xff1a;事务开始执行&#xff0c;InnoDB执行SQL语句的具体操作&#xff0c;如数据修改、删除等&#xff0c;并将这些操作记录在内存中。写入Redo Log&#xff08;准备阶段&#xff09;&#xff1a;事务即将提交时&#xff0c;首先将事务相关的…