log4j2日志框架使用

依赖

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

配置文件样列

<?xml version="1.0" encoding="UTF-8"?>
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<Configuration status="warn" monitorInterval="60"><!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL --><Properties><Property name="LOG_HOME">./log4j2</Property></Properties><Appenders><!-- 输出控制台日志的配置 --><Console name="console" target="SYSTEM_OUT"><!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--><ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/><!-- 输出日志的格式 --><!-- 格式化输出:%date表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符--><!-- %logger{36} 表示 Logger 名字最长36个字符 --><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/></Console><!-- 打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 --><RollingFile name="infoLog" fileName="${LOG_HOME}/log-analysis-info.log"filePattern="${LOG_HOME}/log-analysis-info-%d{yyyy-MM-dd}-%i.log.gz"><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS z} [%thread] %-5level %logger{36} %L %M - %msg%xEx%n"/><Policies><!--interval属性用来指定多久滚动一次,默认是1, 单位到底是月 天 小时 分钟,根据filePattern配置的日期格式而定,本处的格式为天,则默认为1天--><TimeBasedTriggeringPolicy interval="1" modulate="true"/><!--按大小分--><SizeBasedTriggeringPolicy size="20 MB"/></Policies><Filters><!-- 只记录info和warn级别信息 --><!--<ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>--><ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/></Filters><!-- 指定每天的最大压缩包个数,默认7个,超过了会覆盖之前的 --><DefaultRolloverStrategy max="1000"/></RollingFile><!-- 存储所有error信息 --><RollingFile name="errorLog" fileName="${LOG_HOME}/log-analysis-error.log"filePattern="${LOG_HOME}/log-analysis-error-%d{yyyy-MM-dd}-%i.log.gz"><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS z} [%thread] %-5level %logger{36} %L %M - %msg%xEx%n"/><Policies><!--interval属性用来指定多久滚动一次,默认是1, 单位到底是月 天 小时 分钟,根据filePattern配置的日期格式而定,本处的格式为天,则默认为1天--><TimeBasedTriggeringPolicy interval="1" modulate="true"/><!--按大小分--><SizeBasedTriggeringPolicy size="20 MB"/></Policies><Filters><!-- 只记录error级别信息 --><ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/></Filters><!-- 指定每天的最大压缩包个数,默认7个,超过了会覆盖之前的 --><DefaultRolloverStrategy max="1000"/></RollingFile></Appenders><Loggers><!-- root logger 配置,全局配置,默认所有的Logger都继承此配置 --><!-- AsyncRoot - 异步记录日志 - 需要LMAX Disruptor的支持 --><Root level="info"><AppenderRef ref="infoLog"/><AppenderRef ref="errorLog"/><AppenderRef ref="console"/></Root><!--将logger中的 additivity 属性配置为 false,则这个logger不会将日志流反馈到root中,反之会反馈到root中--><!--所谓反馈即是指:会把该日志事件输入到root下配置的appender中,然后根据条件输出--><logger name = "com.lyc.log.log4j2" additivity = "false"><AppenderRef ref="infoLog"/><AppenderRef ref="errorLog"/><AppenderRef ref="console"/></logger></Loggers>
</Configuration>

配置项说明

log4j2的配置文件语法树如下:结构清晰。总配置是一个Configuration,下面包含4类标签:

Properties、filter、appenders、loggers

<?xml version="1.0" encoding="UTF-8"?>;
<Configuration>
  <Properties>
    <Property >value</property>
  </Properties>
  <filter  ... />
  <Appenders>
    <appender ... >
      <filter  ... />
    </appender>
    ...
  </Appenders>
  <Loggers>
    <Logger >
      <appender .../>
    </Logger>
    ...
    <Root level="level">
      <AppenderRef ref="name"/>
    </Root>
  </Loggers>
</Configuration>

源码浅析

入口:

Logger logger = LogManager.getLogger(Log4j2ParseDemo1.class.getName());

LogManager静态代码块:

这里是基于jdk的spi机制读取依赖中实现了org.apache.logging.log4j.spi.Provider类:在log4j2中的类是:org.apache.logging.log4j.core.impl.Log4jProvider

然后获取日志上线文

最终会由ConfigurationFactory#getConfiguration完成配置文件加载初始化。

log4j2支持四种类型的配置文件:XML/JSON/YML/Properties(后缀支持的不只4种),由四种解析器完成。主流配置是xml。

 org.apache.logging.log4j.core.config.ConfigurationFactory.Factory#getConfiguration(org.apache.logging.log4j.core.LoggerContext, java.lang.String, java.net.URI)

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言第十六集(前)

1.关于那个整形存储入char的 是先取好补码,再截断 例: 2.%u是以十进制的形式打印无符号整数 3.注意(背):存储的char类型变量的补码为10000000的直接解析为-128 4.signed char 类型的变量取值范围是-128~127 5.unsigned char 类型的变量取值范围是0~255 6.有符号类型的变量…

【C/PTA —— 15.结构体2(课外实践)】

C/PTA —— 15.结构体2&#xff08;课外实践&#xff09; 7-1 一帮一7-2 考试座位号7-3 新键表输出7-4 可怕的素质7-5 找出同龄者7-6 排队7-7 军训 7-1 一帮一 #include<stdio.h> #include<string.h>struct student {int a;char name[20]; };struct student1 {int …

[⑧ADRV902x]: Digital Pre-Distortion (DPD)学习笔记

前言 DPD 数字预失真技术&#xff0c;是一种用于抑制功率放大器非线性失真的方法。 它通过在信号输入功率放大器&#xff08;PA&#xff09;之前插入一个预失真模块&#xff0c;对输入信号进行适当的调制&#xff0c;以抵消功率放大器引起的非线性失真&#xff0c;使功率放大器…

JAVA常用队列

阻塞队列介绍 Queue接口 public interface Queue<E> extends Collection<E> { //添加一个元素&#xff0c;添加成功返回true, 如果队列满了&#xff0c;就会抛出异常 boolean add(E e); //添加一个元素&#xff0c;添加成功返回true, 如果队列满了&#xff0c;返回…

主动而非被动:确保网络安全运营弹性的途径

金融部门处理威胁的经验对网络安全领域的任何人都有启发——没有什么可以替代提前摆脱潜在的风险和问题。 从狂野西部的银行劫匪到勒索软件即服务 (RaaS)&#xff0c;全球金融生态系统面临的威胁多年来发生了巨大变化。技术进步带动了金融业的快速发展&#xff0c;从现金交易到…

相控阵天线(十四):常规大阵列天线分布(椭圆阵列、三角阵列、矩形拼接阵列、栅格拼接阵列)

目录 简介椭圆阵列三角阵列子阵拼接的矩形阵列子阵拼接的圆形阵列圆形子阵拼接阵列子阵栅格拼接阵列 简介 前面的博客已经介绍过常见的平面阵有一些基本类型&#xff0c;本篇博客介绍一些实际工程中可能出现的阵列&#xff0c;包括椭圆阵列、子阵通过矩形拼接形成的矩形大阵列…

QT Windos平台下打包应用程序

一、windeployqt.exe windeployqt&#xff1a;是 Qt 框架自带的一个工具&#xff0c;用于将一个 Qt 应用程序在 Windows 操作系统下进行打包。它可以通过扫描应用程序的依赖项获取所需的 Qt 库文件、插件和翻译文件&#xff0c;以及复制应用程序可执行文件和所需的依赖项到指定…

CTF刷题记录

刷题 我的md5脏了KFC疯狂星期四坤坤的csgo邀请simplePHPcurl 我的md5脏了 g0at无意间发现了被打乱的flag&#xff1a;I{i?8Sms??Cd_1?T51??F_1?} 但是好像缺了不少东西&#xff0c;flag的md5值已经通过py交易得到了&#xff1a;88875458bdd87af5dd2e3c750e534741 flag…

公众号提高数量

一般可以申请多少个公众号&#xff1f;目前公众号申请数量的规定是从2018年底开始实施的&#xff0c;至今没有变化。规定如下&#xff1a;1、个人可以申请1个个人主体的公众号&#xff1b;2、企业&#xff08;有限公司&#xff09;可以申请2个公众号&#xff1b;3、个体户可以申…

uView框架的安装与Git管理

参考链接&#xff1a;Http请求 | uView - 多平台快速开发的UI框架 - uni-app UI框架 安装 打开我们项目的cmd进行下载&#xff1a; yarn add uview-ui 首先我们要确定&#xff0c;未下载前的文件目录以及下载后&#xff0c;是多了个文件目录node_modules 下载完成之后我们就…

Leetcode—219.存在重复元素II【简单】

2023每日刷题&#xff08;五十三&#xff09; Leetcode—219.存在重复元素II 实现代码 class Solution { public:bool containsNearbyDuplicate(vector<int>& nums, int k) {unordered_map<int, int> m;int n nums.size();for(int i 0; i < n; i) {if(m…

【无线网络技术】——无线个域网(学习笔记)

&#x1f4d6; 前言&#xff1a;手机、PC机、电视等消费类产品非常普及&#xff0c;人们希望有一种短距离、低成本、小功耗的无线通信方式&#xff0c;实现不同功能单一设备的互联&#xff0c;提供小范围内设备的自组网机制&#xff0c;并通过一定的安全接口完成自组小网与广域…