Java日志框架Log4j 2详解

目录

一、什么是日志?

二、日志的主要用途

三、常用日志框架

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节点)。

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

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

相关文章

Linux内核之kstrdup代码实例(二十六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

【数据结构】线性表的定义及基本操作

文章目录 前言线性表的定义线性表的基本操作基本操作其他常用操作 总结 前言 数据结构的三要素是逻辑结构、数据的运算、存储结构&#xff08;物理结构&#xff09;&#xff0c;存储结构不同&#xff0c;运算的实现方式也不同。 本次文章包括线性表的定义和基本操作&#xff0…

rancher里的ingress如何配置gzip压缩

方案一&#xff0c;未试验成功&#xff0c;但配置过程值得记录一下 通过配置configmap&#xff0c;然后在ingress的deployment里引用configmap实现。 参考文章 创建configmap apiVersion: v1 kind: ConfigMap metadata:name: nginx-ingress-controllerannotations:{} # k…

Mybatis的XML配置文件

Xml文件中写SQL 为什么要学? 学习了Mybatis中XML配置文件的开发方式了&#xff0c;大家可能会存在一个疑问&#xff1a;到底是使用注解方式开发还是使用XML方式开发&#xff1f; 官方说明&#xff1a;https://mybatis.net.cn/getting-started.html 结论&#xff1a;使用Myba…

信号处理--基于gumbel-softmax方法实现运动想象分类的通道选择

目录 背景 亮点 环境配置 数据 方法 结果 代码获取 参考文献 背景 基于Gumbel-softmax方法EEG通道选择层的PyTorch实现。该层可以放置在任何深度神经网络架构的前面&#xff0c;以共同学习给定任务和网络权重的脑电图通道的最佳子集。这一层由选择神经元组成&#xff0c;每个神…

【Node.js相关问题】npm install报错后重装node版本及npm环境变量配置及npm run dev启动报错原因分析解决办法

一、问题描述 昨天在准备打开b站up主三更草堂的博客项目08-02.基础版本前端联调_哔哩哔哩_bilibili中的前端工程时&#xff0c;使用以下两个命令分别都出现了报错。 命令1&#xff1a; # install dependenciesnpm install 命令2&#xff1a; # serve with hot reload at loca…

[vscode]将命令行参数传递给调试目标

一、简介 本文介绍了在vscode中使用cmake工具时&#xff0c;如何传递参数给编译目标的方法。 前提&#xff1a;使用vscodecmake编译C/C程序。 二、方法 在.vscode/目录下新建settings.json文件&#xff0c;并将待传底的参数写在 cmake.debugConfig里。 下面介绍了一个示例&a…

pymysql连不上mysql的原因

我试了两种解决办法。可以参考一下 第一种&#xff1a;查看有没有打开mysql服务 第二种&#xff1a;刷新 MySQL 用户权限 password改成自己的密码 GRANT ALL PRIVILEGES ON *.* TO root% IDENTIFIED BY password WITH GRANT OPTION;FLUSH PRIVILEGES; 第三种&#xff1a;检…

CCCorelib 点云曲面特征(CloudCompare内置算法库)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 这里基于每个点的邻域协方差来获取点云中具有的曲面几何特征的点,计算方式如下图所示: 二、实现代码 // CloudCompare #include <CCCoreLib/PointCloudTpl.h> #include <CCCoreLib/

多维时序 | Matlab实现VMD-CNN-BiLSTM变分模态分解结合卷积神经网络结合双向长短期记忆神经网络多变量时间序列预测

多维时序 | Matlab实现VMD-CNN-BiLSTM变分模态分解结合卷积神经网络结合双向长短期记忆神经网络多变量时间序列预测 目录 多维时序 | Matlab实现VMD-CNN-BiLSTM变分模态分解结合卷积神经网络结合双向长短期记忆神经网络多变量时间序列预测预测效果基本介绍程序设计参考资料 预测…

微信小程序小白易入门基础教程1

微信小程序 基本结构 页面配置 页面配置 app.json 中的部分配置&#xff0c;也支持对单个页面进行配置&#xff0c;可以在页面对应的 .json 文件来对本页面的表现进行配置。 页面中配置项在当前页面会覆盖 app.json 中相同的配置项&#xff08;样式相关的配置项属于 app.js…

<2024最新>ChatGPT逆向教程

前言 在使用本篇文章用到的项目以及工具时,需要对其有一定的了解,无法访问以及无法使用的问题作者不承担任何责任,可以自行想办法解决遇到的问题​。 文章若有不合适,有问题的地方,请私聊指出,谢谢~ 准备工具 一台至少 2 核 2G 内存的服务器,推荐是位于香港、新加坡或…

微服务day01 -- SpringCloud01 -- (Eureka , Ribbon , Nacos)

介绍微服务 1.认识微服务(p1-p5) 随着互联网行业的发展&#xff0c;对服务的要求也越来越高&#xff0c;服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢&#xff1f; 1.0.学习目标 了解微服务架构的优缺点 1.1.单体架构 单体架构&#…

vue.js项目评估流程图特效

vue.js项目评估流程图特效是一款带节点流程支持增加删除编辑的结构图代码。 下载地址 vue.js项目评估流程图特效

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:RemoteWindow)

远程控制窗口组件&#xff0c;可以通过此组件控制应用窗口&#xff0c;提供启动退出过程中控件动画和应用窗口联动动画的能力。 说明&#xff1a; 该组件从API Version 9开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 该组件为系统接口。…

jmeter发送请求参数如何使用变量

问题描述 发送jmeter请求时&#xff0c;想设置请求参数为变量 解决方法

css3实现3D立方体旋转特效源码

源码介绍 CSS3自动旋转正方体3D特效是一款基于css3 keyframes属性制作的图片相册自动旋转立方体特效 效果展示 下载地址 css3实现3D立方体旋转特效代码

微信小程序实现上下手势滑动切换

效果图 思路 实现一个微信小程序的复合滚动页面&#xff0c;主要通过Swiper组件实现垂直方向的轮播功能&#xff0c;每个轮播项内部使用Scroll-View组件来展示可垂直滚动的长内容&#xff0c;如图片和文本。 代码 <!-- wxml --> <view class"swiper-container…

为什么要分模块开发 以及maven的作用体现

为什么要分模块开发? 我们要知道分模块开发需要先针对模块进行设计再进行编码。 1.模块的创建 首先来看一下模块的创建 我们先理解一个思路我们一般项目是从本地仓库去找资源坐标,如果本地仓库都没有那是不可能找的到的 如果你idea中可以找到不爆红但是compile的时候会报错,除…

JavaParser的快速介绍

开发的工作主要是写代码&#xff0c; 有考虑过使用代码写代码&#xff0c; 使用代码分析和改进代码吗&#xff1f; JavaParser 就可以帮你用来处理Java 代码的这些功能。 Java Parser 的介绍 Java Parser是一个用于解析和分析Java源代码的开源工具。它提供了一个API接口&…