日志框架——Log4j2

news/2024/11/24 6:22:18/

日志框架——Log4j2

  • 日志框架Log4j2
    • 1. 概述
    • 2. Log4j2主要由几个重要的组件构成:
    • 3.项目中使用
      • 3.1 引入相关依赖pom.xml
      • 3.2 加入日志配置文件src/main/resources/log4j2.xml
      • 3.3 测试

日志框架Log4j2

在这里插入图片描述

1. 概述

Apache Log4j2是一个开源的日志记录组件,使用非常的广泛。在工程中以易用方便代替了System.out 等打印语句,它是JAVA下最流行的日志输入工具。

2. Log4j2主要由几个重要的组件构成:

(1)日志信息的优先级,
日志信息的优先级从高到低有TRACE<DEBUG<INFO<WARN<ERROR<FATAL
TRACE:追踪,是最低的日志级别,相当于追踪程序的执行
DEBUG:调试,一般在开发中,都将其设置为最低的日志级别
INFO:信息,输出重要的信息,使用较多
WARN:警告,输出警告的信息
ERROR:错误,输出错误信息
FATAL:严重错误
这些级别分别用来指定这条日志信息的重要程度;级别高的会自动屏蔽级别低的日志,也就是说,设置了WARN的日志,则INFO、DEBUG的日志级别的日志不会显示。

(2)日志信息的输出目的地,日志信息的输出目的地指定了日志将打印到控制台还是文件中;

(3)日志信息的输出格式,而输出格式则控制了日志信息的显示内容。

3.项目中使用

3.1 引入相关依赖pom.xml

    <!--log4j2的依赖--><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.17.1</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j-impl</artifactId><version>2.17.1</version></dependency>

3.2 加入日志配置文件src/main/resources/log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<configuration status="WARN" monitorInterval="30"><!--先定义所有的appender--><appenders><!--这个输出控制台的配置--><console name="Console" target="SYSTEM_OUT"><!--输出日志的格式--><PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] - %l - %m%n"/></console><!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用--><File name="log" fileName="logs/test.log" append="false"><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/></File><!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档--><RollingFile name="RollingFileInfo" fileName="logs/info.log"filePattern="logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log"><PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] - %l - %m%n"/><Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicy size="100 MB"/></Policies><filters><!--不包含--><ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/><!--包含--><ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/></filters></RollingFile><RollingFile name="RollingFileWarn" fileName="logs/warn.log"filePattern="logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log"><PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] - %l - %m%n"/><Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicy size="100 MB"/></Policies><!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 --><DefaultRolloverStrategy max="20"/><filters><!--不包含--><ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/><!--包含--><ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/></filters></RollingFile><RollingFile name="RollingFileError" fileName="logs/error.log"filePattern="logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log"><PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] - %l - %m%n"/><Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicy size="100 MB"/></Policies><ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/></RollingFile></appenders><!--然后定义logger,只有定义了logger并引入的appender,appender才会生效--><loggers><root level="ALL"><appender-ref ref="Console"/><appender-ref ref="RollingFileWarn"/><appender-ref ref="RollingFileError"/></root><!--过滤掉spring和mybatis的一些无用的DEBUG信息--><logger name="org.springframework" level="INFO" additivity="false"><appender-ref ref="Console"/><appender-ref ref="RollingFileInfo"/></logger><logger name="org.mybatis" level="INFO"></logger></loggers>
</configuration>

3.3 测试

private Logger logger = LoggerFactory.getLogger(类名.class);
package com.guo.spring6;import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** @Author Ronghao.Guo* @Date 2023/6/4 14:32*/
public class TestUser {private Logger logger = LoggerFactory.getLogger(TestUser.class);@Testpublic void testUserObject(){//1. 加载Spring配置文件,对象创建ApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("bean.xml");//2.获取创建的 对象User user = (User) classPathXmlApplicationContext.getBean("user");System.out.println("对象: " + user);//3.使用对象调用方法进行测试user.add();logger.trace("trace日志");logger.debug("debug日志");logger.info("info日志");logger.warn("warn日志");logger.error("error日志");}//利用反射创建对象@Testpublic void testUserObject1() throws Exception {//获取类Class对象Class classs = Class.forName("com.guo.spring6.User");//调用方法创建对象
//        Object o = classs.newInstance();User user = (User) classs.getDeclaredConstructor().newInstance();System.out.println("利用反射创建对象" + user);}}

运行结果

"D:\Program Files\java\jdk17\bin\java.exe" -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:E:\Program Files\JetBrains\IntelliJ IDEA 2021.2.3\lib\idea_rt.jar=30739:E:\Program Files\JetBrains\IntelliJ IDEA 2021.2.3\bin" -Dfile.encoding=UTF-8 -classpath "E:\Program Files\JetBrains\IntelliJ IDEA 2021.2.3\lib\idea_rt.jar;E:\Program Files\JetBrains\IntelliJ IDEA 2021.2.3\plugins\junit\lib\junit5-rt.jar;E:\Program Files\JetBrains\IntelliJ IDEA 2021.2.3\plugins\junit\lib\junit-rt.jar;E:\javaee\spring6\spring-first\target\test-classes;E:\javaee\spring6\spring-first\target\classes;C:\Users\abc\.m2\repository\org\springframework\spring-context\6.0.4\spring-context-6.0.4.jar;C:\Users\abc\.m2\repository\org\springframework\spring-aop\5.3.23\spring-aop-5.3.23.jar;C:\Users\abc\.m2\repository\org\springframework\spring-beans\5.3.23\spring-beans-5.3.23.jar;C:\Users\abc\.m2\repository\org\springframework\spring-core\5.3.23\spring-core-5.3.23.jar;C:\Users\abc\.m2\repository\org\springframework\spring-jcl\5.3.23\spring-jcl-5.3.23.jar;C:\Users\abc\.m2\repository\org\springframework\spring-expression\5.3.23\spring-expression-5.3.23.jar;C:\Users\abc\.m2\repository\junit\junit\4.13.2\junit-4.13.2.jar;C:\Users\abc\.m2\repository\org\hamcrest\hamcrest-core\2.2\hamcrest-core-2.2.jar;C:\Users\abc\.m2\repository\org\apache\logging\log4j\log4j-core\2.20.0\log4j-core-2.20.0.jar;C:\Users\abc\.m2\repository\org\apache\logging\log4j\log4j-api\2.17.2\log4j-api-2.17.2.jar;C:\Users\abc\.m2\repository\org\apache\logging\log4j\log4j-slf4j2-impl\2.20.0\log4j-slf4j2-impl-2.20.0.jar;C:\Users\abc\.m2\repository\org\slf4j\slf4j-api\1.7.36\slf4j-api-1.7.36.jar;C:\Users\abc\.m2\repository\org\springframework\boot\spring-boot-starter\2.6.13\spring-boot-starter-2.6.13.jar;C:\Users\abc\.m2\repository\org\springframework\boot\spring-boot\2.6.13\spring-boot-2.6.13.jar;C:\Users\abc\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.6.13\spring-boot-autoconfigure-2.6.13.jar;C:\Users\abc\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.6.13\spring-boot-starter-logging-2.6.13.jar;C:\Users\abc\.m2\repository\ch\qos\logback\logback-classic\1.2.11\logback-classic-1.2.11.jar;C:\Users\abc\.m2\repository\ch\qos\logback\logback-core\1.2.11\logback-core-1.2.11.jar;C:\Users\abc\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.17.2\log4j-to-slf4j-2.17.2.jar;C:\Users\abc\.m2\repository\org\slf4j\jul-to-slf4j\1.7.36\jul-to-slf4j-1.7.36.jar;C:\Users\abc\.m2\repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;C:\Users\abc\.m2\repository\org\yaml\snakeyaml\1.29\snakeyaml-1.29.jar;C:\Users\abc\.m2\repository\org\springframework\boot\spring-boot-starter-test\2.6.13\spring-boot-starter-test-2.6.13.jar;C:\Users\abc\.m2\repository\org\springframework\boot\spring-boot-test\2.6.13\spring-boot-test-2.6.13.jar;C:\Users\abc\.m2\repository\org\springframework\boot\spring-boot-test-autoconfigure\2.6.13\spring-boot-test-autoconfigure-2.6.13.jar;C:\Users\abc\.m2\repository\com\jayway\jsonpath\json-path\2.6.0\json-path-2.6.0.jar;C:\Users\abc\.m2\repository\net\minidev\json-smart\2.4.8\json-smart-2.4.8.jar;C:\Users\abc\.m2\repository\net\minidev\accessors-smart\2.4.8\accessors-smart-2.4.8.jar;C:\Users\abc\.m2\repository\org\ow2\asm\asm\9.1\asm-9.1.jar;C:\Users\abc\.m2\repository\jakarta\xml\bind\jakarta.xml.bind-api\2.3.3\jakarta.xml.bind-api-2.3.3.jar;C:\Users\abc\.m2\repository\jakarta\activation\jakarta.activation-api\1.2.2\jakarta.activation-api-1.2.2.jar;C:\Users\abc\.m2\repository\org\assertj\assertj-core\3.21.0\assertj-core-3.21.0.jar;C:\Users\abc\.m2\repository\org\hamcrest\hamcrest\2.2\hamcrest-2.2.jar;C:\Users\abc\.m2\repository\org\junit\jupiter\junit-jupiter\5.8.2\junit-jupiter-5.8.2.jar;C:\Users\abc\.m2\repository\org\junit\jupiter\junit-jupiter-api\5.8.2\junit-jupiter-api-5.8.2.jar;C:\Users\abc\.m2\repository\org\opentest4j\opentest4j\1.2.0\opentest4j-1.2.0.jar;C:\Users\abc\.m2\repository\org\junit\platform\junit-platform-commons\1.8.2\junit-platform-commons-1.8.2.jar;C:\Users\abc\.m2\repository\org\apiguardian\apiguardian-api\1.1.2\apiguardian-api-1.1.2.jar;C:\Users\abc\.m2\repository\org\junit\jupiter\junit-jupiter-params\5.8.2\junit-jupiter-params-5.8.2.jar;C:\Users\abc\.m2\repository\org\junit\jupiter\junit-jupiter-engine\5.8.2\junit-jupiter-engine-5.8.2.jar;C:\Users\abc\.m2\repository\org\junit\platform\junit-platform-engine\1.8.2\junit-platform-engine-1.8.2.jar;C:\Users\abc\.m2\repository\org\mockito\mockito-core\4.0.0\mockito-core-4.0.0.jar;C:\Users\abc\.m2\repository\net\bytebuddy\byte-buddy\1.11.22\byte-buddy-1.11.22.jar;C:\Users\abc\.m2\repository\net\bytebuddy\byte-buddy-agent\1.11.22\byte-buddy-agent-1.11.22.jar;C:\Users\abc\.m2\repository\org\objenesis\objenesis\3.2\objenesis-3.2.jar;C:\Users\abc\.m2\repository\org\mockito\mockito-junit-jupiter\4.0.0\mockito-junit-jupiter-4.0.0.jar;C:\Users\abc\.m2\repository\org\skyscreamer\jsonassert\1.5.1\jsonassert-1.5.1.jar;C:\Users\abc\.m2\repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;C:\Users\abc\.m2\repository\org\springframework\spring-test\5.3.23\spring-test-5.3.23.jar;C:\Users\abc\.m2\repository\org\xmlunit\xmlunit-core\2.8.4\xmlunit-core-2.8.4.jar" com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit4 com.guo.spring6.TestUser,testUserObject
19:05:40.807 [main] DEBUG org.springframework.context.support.ClassPathXmlApplicationContext - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@4493d195
19:05:41.582 [main] DEBUG org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loaded 1 bean definitions from class path resource [bean.xml]
19:05:41.699 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'user'
无惨构造
对象: com.guo.spring6.User@36b4fe2a
add......
19:05:41.976 [main] DEBUG com.guo.spring6.TestUser - debug日志
19:05:41.977 [main] INFO com.guo.spring6.TestUser - info日志
19:05:41.977 [main] WARN com.guo.spring6.TestUser - warn日志
19:05:41.977 [main] ERROR com.guo.spring6.TestUser - error日志Process finished with exit code 0

http://www.ppmy.cn/news/210157.html

相关文章

LeetCode知识点总结 - 812

LeetCode 812. Largest Triangle Area 考点难度ArrayEasy 题目 Given an array of points on the X-Y plane points where points[i] [xi, yi], return the area of the largest triangle that can be formed by any three different points. Answers within 10^-5 of the …

沧田 DT812K 打印机驱动

沧田 DT812K 打印机驱动是官方提供的一款打印机驱动&#xff0c;本站收集提供高速下载&#xff0c;用于解决打印机与电脑连接不了&#xff0c;无法正常使用的问题&#xff0c;本动适用于&#xff1a;Windows XP / Windows 7 / Windows 8 / Windows 10 32/64位操作系统。有需要的…

LeetCode: 812. 最大三角形面积

文章目录 一. 题目1. 链接2. 框架3. 描述4. 示例5. 数据范围 二. 解题1. 思路2. 复杂度3. 源码4. 考察 一. 题目 1. 链接 题目链接&#xff1a;LeetCode: 812. 最大三角形面积 2. 框架 c代码框架&#xff1a; class Solution { public:double largestTriangleArea(vector&…

spark 实现K-means算法

spark 实现K-means算法 package kmeans; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList;. impo…

k1075停运吗_【暴雨致沪昆娄底区段多趟列车停运,广大旅客应随时关注信息】...

湖南境内&#xff0c;持续多天的强降雨还没有停止&#xff0c;沪昆线娄底车务段辖内的多个区段遭遇水害&#xff0c;雨量超警戒水位值&#xff0c;为确保旅客和列车行车安全&#xff0c;铁路部门对部分线路进行封锁&#xff0c;途经的多趟列车晚点或停运(具体车次附后)&#xf…

812. 最大三角形面积

给定包含多个点的集合&#xff0c;从其中取三个点组成三角形&#xff0c;返回能组成的最大三角形的面积。 示例: 输入: points [[0,0],[0,1],[1,0],[0,2],[2,0]] 输出: 2 解释: 这五个点如下图所示。组成的橙色三角形是最大的&#xff0c;面积为2。class Solution {public do…

LeetCode —— 812 最大三角形面积

问题描述 给定包含多个点的集合&#xff0c;从其中取三个点组成三角形&#xff0c;返回能组成的最大三角形的面积。 示例: 输入: points [[0,0],[0,1],[1,0],[0,2],[2,0]] 输出: 2 解释: 这五个点如下图所示。组成的橙色三角形是最大的&#xff0c;面积为2。 来源&#xff…

k1075停运吗_列车停运计划

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 7月14日凌晨开始&#xff0c;受湘西北地区持续暴雨影响&#xff0c;沪昆铁路、渝怀铁路、焦柳铁路部分区段发生局部溜坍和泥石流现象。铁路部门在线路巡查过程中及时发现了险情并第一时间启动应急预案&#xff0c;临时封锁线路&am…