Java日志框架Log4j 2详解

news2024/10/6 2:24:53

目录

一、什么是日志?

二、日志的主要用途

三、常用日志框架

1、Apache Log4j

2、Commons Logging

3、SLF4J

4、Logback

5、JUL(Java Util Logging)

6、Log4j 2

四、log4j 2 的优点

五、Log4j 2下载和配置

1、访问Log4j – 下载 Apache Log4j™ 2官网,下载log4j 2压缩文件

2、将压缩包解压后,将log4j-api-2.23.1.jar和log4j-core-2.23.1.jar两个jar包导入项目中。具体操作如下。

​编辑 3、配置文件

4、使用日志框架示例(在这就只展示一种,需要了解更多的可以私信我):

 五、xml文件配置文件的各节点及其属性介绍

1、configuration

2、appenders

3、Console

4、File

5、loggers

6、logger

六、日志输出格式的常用占位符 

常用的占位符及其含义:


        程序在开发完成后会被不同系统环境的用户使用,在使用过程中可能会出现各类异常,程序出现的技术错误信息是提供给开发人员定位问题并解决问题。将这些信息直接展示给用户看是没有任何意义的。这时,可以将用户执行的所有操作和程序运行的过程记录到日志中,开发人员可以通过分析日志内容,快速定位并诊断问题。

一、什么是日志?

        日志是记录系统或应用程序在运行过程中所发生事件或行为的详细信息的文件。它通常包括时间戳、事件类型、事件描述等信息,以便在需要时进行故障排查、性能优化、安全审计等工作。日志可以帮助开发人员和系统管理员诊断应用程序问题,了解系统运行情况,以及存档和监控事件。在java中一般都是使用log4j 2的日志框架

二、日志的主要用途

  1. 问题追踪:辅助排查和定位问题,优化程序运行性能;
  2. 状态监控:通过日志分析,可以监控系统的运行状态;
  3. 安全审计:主要体现在安全上,可以发现非授权操作;

三、常用日志框架

1、Apache Log4j

Apache Log4j是基于Java的日志记录工具,现在是Apache软件基金会的一个项目。Log4j是几种Java日志框架之一

2、Commons Logging

Apache基金会所属的项目,是一套Java日志接口

3、SLF4J

类似于Commons Logging,是一套简易Java日志门面,本身并无日志的实现

4、Logback

一套日志组件的实现(属于SLF4J阵营)

5、JUL(Java Util Logging)

自Java1.4以来的官方日志实现

6、Log4j 2

Apache重写Log4j 1.x,成立新的项目Log4j 2。Log4j 2是Apache开发的一款升级产品;

在这给大家展示的是Log4j 2。log4j 2是一款非常优秀的日志框架,log4j 2与log4j相比发生了很大变化,日志的吞吐量及性能有很大的提升,解决了死锁的问题,配置更加简单灵活,它不兼容log4j。log4j 2具有Logback的所有特性。

四、log4j 2 的优点

log4j2是Apache软件基金会的一个日志框架,具有以下优点:

  1. 高性能:Log4j 2使用异步日志写入,能够获得更好的性能表现。
  2. 灵活性:Log4j 2提供了多种输出模式和过滤器,能够满足各种不同场景和需求。
  3. 插件化:Log4j 2支持插件化的扩展,可以通过插件快速地集成到不同的系统中。
  4. 多线程安全:Log4j 2是线程安全的,多线程中不会出现数据不一致的情况。
  5. 支持多种编程语言:Log4j 2支持多种编程语言,在Java、Scala和Kotlin等语言中都能够使用。

五、Log4j 2下载和配置

1、访问Log4j – 下载 Apache Log4j™ 2官网,下载log4j 2压缩文件

2、将压缩包解压后,将log4j-api-2.23.1.jar和log4j-core-2.23.1.jar两个jar包导入项目中。具体操作如下。

(1)在项目文件src文件夹中创建lib文件夹,将log4j-api-2.23.1.jar和log4j-core-2.23.1.jar保存正在其中。

(2)在IntelliJ IDEA 开发环境中,执行“File”  ——>“Project Structure” 命令。

(3)打开“Project Structure” (项目结构)对话框,选择“Modules” 选项。

(4)在右侧窗格中选择“Dependencies” 选项卡后,单击右侧 “+” 按钮,在打开的菜单中执行“JARs or directories” 命令。

(5)从lib文件夹中选择两个 .jar 文件,单击“OK”按钮,将其添加到列表中并选择,单击“OK”按钮 。

 

 3、配置文件

1、src下新建配置文件  [ log4j.xml ]

2、log4j2的配置文件可以使用:.xml、.json或 .jsn等

3、编写代码

<Configuration status="OFF">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%l] %-5level-%msg%n"/>
        </Console>
        <File name="log" fileName="log/test.log">
        <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%l] %-5level-%msg%n"/>
        </File>
    </Appenders>
    <loggers>
        <Root level="all">
            <Appender-Ref ref="Console"/>
            <Appender-Ref ref="log"/>
        </Root>
    </loggers>
</Configuration>

4、使用日志框架示例(在这就只展示一种,需要了解更多的可以私信我):

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import java.util.InputMismatchException;
import java.util.Scanner;


public class Test1 {

private static Logger logger= LogManager.getLogger(Test1.class.getName());
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        try {
            System.out.println("请输入果实采摘量(公斤):");
            int weight = input.nextInt();
            logger.debug("采摘量:" + weight);
            System.out.println("请输入果商数(家):");
            int num = input.nextInt();
            logger.debug("果商数:" + num);
            System.out.println("每家果商供应" + weight / num + "公斤水果");
            logger.debug("输出结果:" + String.format("%d/%d=%d", weight, num, weight / num));
        } catch (ArithmeticException ex) {
            logger.error("输入有误,果商数应大于零!",ex);
        } catch (InputMismatchException ex) {
            logger.error("输入有误,果实采摘量和果商数应为整数!",ex);
        }catch (Exception ex){
            logger.error(ex.getMessage());
        }finally {
            System.out.println("欢迎再来,预祝生意兴隆!");
        }
    }
}

 五、xml文件配置文件的各节点及其属性介绍

1、configuration

根节点,其中可定义appenders节点和loggers节点,属性包含以下内容:
status:可以用来指定Log4j 2本身打印日志的级别
monitorinterval:用来设置配置文件的动态加载时间,单位是秒,最小是5秒

2、appenders

日志输出目的地集合,包含Console、RollingFile、File三类appender节点,这些节点可配置日志输出位置。

3、Console

日志输出到控制台的配置节点,属性包含如下内容:
name:指定节点名称
target:SYSTEM_OUT或SYSTEM_ERR,一般默认为SYSTEM_OUT
PatternLayout:设置输出格式 

4、File

日志输出到控制台的配置节点,属性包含如下内容:
name:指定appender名称
filename:指定输出日志的目的文件,必须是全路径的文件名
PatternLayout:输出格式,不设置时,默认为%m%m 

5、loggers

logger节点集合,其常见的子节点包含Root和Logger,可配置多个logger。

6、logger

用来单独指定日志的形式。例如,需要为包下的class指定不同的日志级别等。属性包含如下内容。
name:指定该logger所适用的类或类所在包的全路径
level:日志输出级别
appender-ref:指定日志输出的目标appender

六、日志输出格式的常用占位符 

常用的占位符及其含义:
  • %d:用来设置输出日志的日期和时间,默认格式为ISO8601。也可以在其后指定格式如%d{yyyy-MM-dd HH:mm:ss},输出的格式类似于2021-03-10 16:43:08
  • %m:输出代码中指定的消息
  • %t:用来输出当前线程的名称
  • %5level:输出日志级别,-5表示左对齐并固定输出5个字符;如果不足,则在右边补0
  • %l(这个是L的小写,不要看成I或者1了):用来输出日志事件的发生位置,包括类名、发生的线程,以及在代码中的行数。例如,如果输出为cn.java.log.Test.main(Test.java:25),则说明日志事件发生在cn.java.log包下的Test类的main线程中,在代码中的行数为第25行
  • %logger:输出logger名称
  • %msg:日志文本
  • %n:换行

注意:

只需在xml文件中编写存入的格式,然后调用Logger对象(不要选错了,要是对应的xml文件的Logger对象),对象值是导入的xml文件(LogManager).getLogger(类名.class.getName());然后调用这个对象的对应级别日志就会按照你输入的内容存入文件中(File节点)和打印到控制台中(Console节点)。

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

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

相关文章

RHEL9 DNF/YUM仓库管理软件包

DNF/YUM仓库管理软件包 一个基于RPM包的软件包管理器能够从指定的服务器自动下载RPM包并且安装&#xff0c;自动处理依赖性关系&#xff0c;并且一次性安装所有依赖的软件包C/S模式 Server服务端提供RPM软件包与数据库文件repodataClient客户端使用dnf仓库 常用组合 组合参…

你还可以通过“nrm”工具,来自由管理“npm”的镜像

你还可以通过“nrm”工具&#xff0c;来自由管理“npm”的镜像 nrm&#xff08;npm registry manager&#xff09;是npm的镜像管理工具&#xff0c;有时候国外的资源太慢&#xff0c;使用这个就可以快速地在npm源间切换。 1.安装nrm 在命令行执行命令&#xff0c;npm install…

Java 容器启动执行指定任务

1、实现CommandLineRunner接口 实现CommandLineRunner接口&#xff0c;注意做初始化任务的类需要放在扫描路径下&#xff0c;使用Component注入到spring容器中。 import com.zw.service.StudentService; import org.springframework.beans.factory.annotation.Autowired; impo…

网络安全AI智能体公司「云起无垠」获数千万元天使+轮融资,致力于大模型与网络安全深度融合的技术研究

「云起无垠」致力于打造最懂安全的AI智能体&#xff0c;通过持续运营的工具、知识以及记忆引擎&#xff0c;不断提升智能体对用户安全场景的理解&#xff0c;以达到易于使用、自我学习、自主行动的特性&#xff0c;助力企业自动化执行各类安全任务&#xff0c;让软件更安全&…

在WSL2中安装多个Ubuntu教程

文章目录 前言一、前期准备1、WSL安装2、Docker安装 二、安装第二个Ubuntu系统1.切换为WSL22.获取Ubuntu16.04的tar文件从容器中导出tar 3. 将tar文件导入WSL4. 设置默认用户 总结 前言 适用于 Linux 的 Windows 子系统 (WSL) 是 Windows 的一项功能&#xff0c;可用于在 Wind…

H12-811_19

19.(多选题)如下图所示的网络&#xff0c;下列哪些命令可以使RouterA可以转发目的IP地址为10.0.3.3的效据包? A.ip route-static 10.0.3.3 255.255.255.255 10.0.12.2 B.ip route-static 10.0.2.2 255.255.255.255 10.0.12.2 ip route-static 10.0.3.3 255.255.255.255 10.0…

7、设计模式之桥接模式(Bridge)

一、什么是桥接模式 桥接模式是一种结构型设计模式。它将抽象部分和实现部分分离&#xff0c;使它们可以独立地变化。 二、角色组成 抽象部分&#xff08;Abstraction&#xff09;&#xff1a;定义了抽象部分的接口&#xff0c;并包含对实现部分的引用。 实现部分&#xff08;…

GPU技术文档汇总

GPU 进阶笔记&#xff08;二&#xff09;&#xff1a;华为昇腾 910B GPU 相关&#xff08;2023&#xff09;https://arthurchiao.art/blog/gpu-advanced-notes-2-zh/

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的铁轨缺陷检测系统(Python+PySide6界面+训练代码)

摘要&#xff1a;开发铁轨缺陷检测系统对于物流行业、制造业具有重要作用。本篇博客详细介绍了如何运用深度学习构建一个铁轨缺陷检测系统&#xff0c;并提供了完整的实现代码。该系统基于强大的YOLOv8算法&#xff0c;并对比了YOLOv7、YOLOv6、YOLOv5&#xff0c;展示了不同模…

做嵌入式编程,为什么用的是C语言而不是C++呢?

做嵌入式编程&#xff0c;为什么用的是C语言而不是C呢&#xff1f; 在开始前我分享下我的经历&#xff0c;我刚入行时遇到一个好公司和师父&#xff0c;给了我机会&#xff0c;一年时间从3k薪资涨到18k的&#xff0c; 我师父给了一些 电气工程师学习方法和资料&#xff0c;让我…

【阿里云系列】-如何实现两个VPC网络资源互通

背景 由于实际项目预算有限&#xff0c;两套环境虽然分别属于不同的专有网络即不同的VPC&#xff0c;但是希望借助一台运维机器实现对两个环境的监控和日常的运维操作 网络架构 如下是需要实现的外网架构图&#xff0c;其中希望实现UAT环境的一台windows的堡垒机可以访问生产…

光学硬件——二向色片

二向色镜&#xff08;Dichroic Mirrors &#xff09;又称双色镜&#xff0c;常用于激光技术中。 产品介绍&#xff1a; 指45度入射或大角度入射时&#xff0c;把光源分离出特定的光谱改变部分光谱光路方向&#xff0c;常用于酶标仪器、荧光显微镜系统、投影光引擎系统、激光灯…

β2-肾上腺素能受体激动剂通过重建T细胞分化的稳态来纠正血小板减少-AbMole

免疫性血小板减少症&#xff08;ITP&#xff09;是一种自身免疫性出血性疾病&#xff0c;其特征是血小板的增加破坏和减少产生。ITP的发病机制尚未完全明了&#xff0c;但已知与自身抗体介导的血小板破坏和脾脏中Fc依赖性吞噬作用有关。 此外&#xff0c;T细胞免疫的异常在ITP的…

解决:黑马webpack视频中出现的问题总结

问题 1 ERROR in main Module not found: Error: Can‘t resolve ‘./src‘ 解决 Webpack 中 ERROR in main Module not found: Error: Can‘t resolve ‘./src‘ 问题 黑马AJAX-Node.js-Webpack教学视频&#xff08;BV1MN411y7pw 其中P98&#xff09;中webpack部分&#xff0c…

《JAVA与模式》之合成模式

系列文章目录 文章目录 系列文章目录前言一、合成模式二、安全式合成模式的结构三、透明式合成模式的结构四、两种实现方法的选择前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享…

综合知识篇00-综合知识考点汇总目录(2024年软考高级系统架构设计师冲刺知识点总结-综合知识篇-先导篇)

专栏系列文章推荐&#xff1a; 2024高级系统架构设计师备考资料&#xff08;高频考点&真题&经验&#xff09;https://blog.csdn.net/seeker1994/category_12593400.html 【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】&#xff08;2024年软考高级…

springboot网页时装购物系统链接

链接:https://pan.baidu.com/s/1mCmCSbqUCv48_a6wiLBdJg?pwdfalz 提取码:falz 2600套项目源码 https://kdocs.cn/l/cuAdxEBfLiqA 工作室精心制作&#xff0c;包括小程序项目&#xff0c;springboot项目&#xff0c;传统ssm项目&#xff0c;前后端分离项目。你可以用来制作自…

TCP/IP模型中网络层和网络接口层的区别 通俗解释

问题 TCP/IP模型中的网络层和网络接口层有什么区别&#xff0c;或者说 ip地址和mac地址有什么区别&#xff0c;通过ip不就能找到要发送的设备了吗 为什么还需要mac地址用简单的语言来解释一下。 TCP/IP模型中的网络层和网络接口层主要的区别在于它们处理的信息和功能不同&…

打字通小游戏制作教程:用HTML5和JavaScript提升打字速度

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

混合测试写一写

题目 服务器IP地址规划&#xff1a;client&#xff1a;12.0.0.12/24&#xff0c;网关服务器&#xff1a;ens36:12.0.0.1/24、ens33&#xff1a;192.168.44.1/24&#xff0c;Web1&#xff1a;192.168.44.30/24&#xff0c;Web2&#xff1a;192.168.44.50/24&#xff0c;Nginx&am…