springboot整合log4j2日志框架1

一  log4j基本知识

1.1 log4j的日志级别

Log4j定义了8个级别的log(除去OFF和ALL,可以说分为6个级别),优先级依次为:All,trace,debug,info,warn,error,fatal,off。

当日志级别设置为某个值的时候,低于它的日志信息将不会被记录,只有高于设置的级别的信息会被记录。

【ALL】:最低等级的,用于打开所有日志记录。

【Trace】:很低日志级别,一般很少使用

【Debug】:debug级别的主要输出调试性质的内容,该级别日志主要用于在开发、测试阶段输出,该级别的日志应尽可能地详尽,便于在开发、测试阶段出现问题或者异常时,对齐进行分析。

【Info】:INFO日志主要记录系统关键信息,旨在保留系统正常工作期间关键运行指标,开发人员可以将初始化系统配置、业务状态变化信息,或者用户业务流程中的核心处理记录到INFO日志中,方便日常运维工作以及错误回溯时上下文场景复现。建议在项目完成后,在测试环境将日志级别调成 INFO,然后通过 INFO 级别的信息看看是否能了解这个应用的运用情况,如果出现问题后是否这些日志能否提供有用的排查问题的信息。

【warn】:warn级别的主要输出警告性质的内容,这些内容是可以预知且是有规划的,比如,某个方法入参为空或者该参数的值不满足运行该方法的条件时,在warn级别时应输出较为详尽的信息,以便于事后对日志进行分析。

【error】:error级别主要对于一些不可预知的信息,如,错误,异常等,比如,在catch快中捕获的网络通信,数据库连接等异常,如果异常对系统的整个流程影响不大,可以使用warn级别日志输出。在输出error级别的日志时,尽量多地输出方法入参数、方法执行过程中产生的对象等数据,在带有错误、异常对象的数据时,需要将该对象一并输出。

【fatal】:指出每个严重的错误事件,将会导致应用程序的退出,这个级别比较高了。重大错误,这种级别你可以直接停止程序了。【1】https://blog.csdn.net/wsskl/article/details/137580290

【OFF】:最高等级的,用于关闭所有日志记录。

1.2 log4j的日志文件结构*

1.2.1 概述

Log4j的日志文件主要结构:Loggers(记录器),Appenders (输出源)和Layouts(布局)。这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出

1.properties: 定义一些变量,如日志格式,路径等。

2.Appenders:定义日志输出的目标位置,如控制台,文件等。

3.Loggers:定义日志记录器,控制日志的输出级别和目标。

4.filters:定义过滤条件,控制日志输出。

其中<configuration>标签的status属性用于设置log4j2自身jar里代码的日志输出级别。将status设置为debug可以获得更详细的内部日志输出,这对于调试和问题排查非常有帮助。

5.完整的结构

1.2.2 详解

Loggers(记录器):Loggers组件被分为7个级别,优先级从低到高:all、debug、info、warn、error、fatal、off。任何一个级别只输出本级别以及它级别以上的级别内容。

Appends(输出源):Log4j允许把日志输出到不同的地方,如控制台(Console)、文件(Files)等。

Layout(布局):Layout的作用是控制Log信息的输出方式,也就是格式化输出的信息。

1根节点Configuration有两个属性status和monitorinterval,有两个子节点:Appenders和Loggers(表明可以定义多个 Appender和Logger):

status用来指定log4j本身的打印日志的级别。

monitorinterval用于指定log4j自动重新配置的监测间隔时间,单位是s,最小是5s

2.Appenders节点,常见的有三种子节点:Console、RollingFile、File:

1)Console节点用来定义输出到控制台的Appender

   name:指定 Appender 的名字

   target:SYSTEM_OUT 或SYSTEM_ERR,一般只设置默认:SYSTEM_OUT

   PatternLayout:输出格式,不设置默认为%m%n

2)File节点用来定义输出到指定位置的文件的Appender

    name:指定Appender的名字

    fileName:指定输出日志的目的文件带全路径的文件名

    PatternLayout:输出格式,不设置默认为%m%n

3)RollingFile节点用来定义超过指定大小自动删除旧的创建新的的Appender

name:指定Appender的名字

fileName:指定输出日志的目的文件带全路径的文件名

PatternLayout:输出格式,不设置默认为%m%n

filePattern:指定新建日志文件的名称格式

Policies:指定滚动日志的策略,就是什么时候进行新建日志文件输出日志

TimeBasedTriggeringPolicy:Policies子节点,基于时间的滚动策略,interval属性用来指定多久滚动一次,默认是1 hour。modulate=true用来调整时间:比如现在是早上3am,interval是4,那么第一次滚动是在4am,接着是8am,12am...而不是7am

SizeBasedTriggeringPolicy:Policies子节点,基于指定文件大小的滚动策略,size 属性用来定义每个日志文件的大小。

DefaultRolloverStrategy:用来指定同一个文件夹下最多有几个日志文件时开始删除最旧的,创建新的(通过max属性)。

3.Loggers节点,常见的有两种Root和Logger:

1)root节点用来指定项目的根日志,如果没有单独指定 Logger,那么就会默认使用该 Root日志输出

level:日志输出级别,共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF

AppenderRef:Root的子节点,用来指定该日志输出到哪个Appender子节点的ref属性也就是前面的RollingFile中指定的name名称,子节点的level也是日志输出级别。

2)logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。每个logger可以指定一个level(TRACE, DEBUG, INFO, WARN, ERROR, ALL or OFF),不指定时level默认为ERROR。

level:日志输出级别,共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF

name:用来指定该 Logger所适用的类或者类所在的包全路径,继承自 Root节点.

AppenderRef:Logger的子节点,用来指定该日志输出到哪个Appender,如果没有指定,就会默认继承自 Root如果指定了,那么会在指定的这个Appender和 Root的Appender中都会输出,此时我们可以设置 Logger的 additivity="false"只在自定义的 Appender中进行输出。

案例配置:

1.3 log4j的日志格式化api

1.3.1 api详解

  log4j - 输出格式控制, PatternLayout参数含义以及详细配置 - frank_cui - 博客园 

1.3.2 演示案例

1.查看 %l

2. 查看%L

2. 查看%L

3查看%msg

 1.3.3 演示案例

%L,%line:显示日志输出的代码所在的行数。Log4j在输出行号时会检查堆栈信息,是耗时的操作。

%c{precision},%logger{precision}:

logger名称,precision可以是一个正整数、负整数、"1."、"1.1.."、"."等格式,用于指定输出的logger的名称的层级和详细程度。

%C{precision},%class{precision}:输出调用者的权限定类名,precision的规则与logger名称的用法相同。Log4j在输出类名时会检查堆栈信息,是耗时的操作,建议使用%c{precision}或%logger{precision}代替。

%d{pattern},%date{pattern}:输出日志事件的时间,pattern经常包含若干对包含时间/日期格式(SimpleDateFormat)的花括号。

 

%m,%msg:输出应用中自定义的日志内容;

%M,%method:输出方法名。Log4j在输出行号时会检查堆栈信息,是耗时的操作;

%n:输出当前运行平台所用的换行符,一般放在末尾;

%p|level{level=label, level=label, ...},%p|level{length=n}%p|level{lowerCase=true|false}:

输出日志的级别。可以每个日志级别指定别名,如%level{WARN=W, DEBUG=D, ERROR=E, TRACE=T, INFO=I},%level{length=1}也可以实现同样的效果,如果length的值超过了日志级别的名称,那么使用正常的日志级别名称。

level=label和length=n可以组合使用,如%level{ERROR=Error, length=2}为ERROR级别指定了别名,为其他日志级别限定了长度。此外,还可以指定级别的大小写。

%T,%tid,%threadId:输出日志的线程号,非常有必要;

%t,%tn,%thread,%threadName:输出日志的线程名称,类似于线程号作用相同,可选择其中一个https://blog.csdn.net/qq_34253002/article/details/129821103

1.4 log4j中onmatch和onmismatch的区别*

1.4.1 案例

表示匹配级别info以上的则输出,info级别以下的不匹配则忽略。

1.4.2 onmatch的api

OnMatch和onMismatch都有3个属性值,分别为ACCEPT,deny和neutal

Onmatch

Onmismatch

Accept:匹配该级别以上

Accept:匹配该级别以下

Deny:不匹配该级别以上

Deny:不匹配该级别以下

Neutral:该级别以上的,由下一个filter处理,如果当前是最后一个,则表示匹配该级别以上。

该级别以及以下的,由下一个filter处理,如果当前是最后一个,则不匹配该级别以下的。

Log4j2的onMatch和onMismatch属性值详解-CSDN博客

在log4j2中,日志级别从低到高依次为: all,trace,debug,info,warn,error,fatal,off。

当设置onMismatch=neutal时,当前过滤器不会对日志事件做出接受或拒绝的决定,而是将事件传递给下一个过滤器处理,如果当前过滤器是最后一个那么不匹配当前日志级别以下的事件将被忽略。

例如,第一个过滤器level设置为error且onmatch为deny,onmismatch=accept,这意味着会输出error以下级别(warn,info,debug,trace)的日志,

当onmismatch=netral,则这些日志事件会继续传递给下一个过滤器处理,而不是被当前过滤器直接处理或者忽略掉。

1.5 logback,log4j2和slf4j的区别

1)SLF4J: 是一个日志门面(抽象层),不是具体实现;提供统一的日志接口,允许用户在部署时选择不同的日志实现;支持多个日志实现:logback、log4j、java.util.logging等

2)Log4j: Apache的开源日志实现;Log4j 1.x已经停止维护;Log4j 2.x是完全重写的版本

3)Logback; Log4j创始人开发的新一代日志框架;作为Log4j的继承者,是SLF4J的原生实现。深入解析Java日志框架:Logback、Log4j 2与SLF4J的区别与使用指南_slf4j logback-CSDN博客4)推荐使用方案:

1. SLF4J + Logback(首选)

2. SLF4J + Log4j2(备选)

5)为什么选用log4j2

相比与其他的日志系统,log4j2丢数据这种情况少;disruptor技术,在多线程环境下,性能高于logback等10倍以上;利用jdk1.5并发的特性,减少了死锁的发生;https://blog.csdn.net/weixin_44001965/article/details/143703014

对于Java工程师来说,关于日志工具的使用,最佳实践就是在应用中使用。如log4j2 + slf4j这样的组合来进行日志输出。这样做的最大好处,就是业务层的开发不需要关心底层日志框架的实现及细节,在编码的时候也不需要考虑日后更换框架所带来的成本。这也是日志接口(门面模式)所带来的好处。

Log4j2使用详解

1.6 log4j2的异常日志格式配置

https://blog.csdn.net/sz85850597/article/details/120572827

 

1.7 log4j2的异步日志配置

https://blog.51cto.com/1936625305/11823448

<loggers>

    <!--includeLocation 打印行号,如果这里不设置,就算%L 也不会打印行号-->

    <AsyncRoot level="DEBUG" includeLocation="true" >

        <AppenderRef ref="CONSOLE"/>

    </AsyncRoot>

    <AsyncLogger name="com.luna" level="INFO" includeLocation="true" >

        <appender-ref ref="FILE-INFO"/>

        <appender-ref ref="FILE-ERROR"/>

    </AsyncLogger>

    <AsyncLogger name="druid.sql.Statement" level="DEBUG" additivity="false" includeLocation="true" >

        <appender-ref ref="CONSOLE"/>

        <appender-ref ref="FILE-INFO"/>

    </AsyncLogger>

</loggers>

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

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

相关文章

Spring源码_05_IOC容器启动细节

前面几章&#xff0c;大致讲了Spring的IOC容器的大致过程和原理&#xff0c;以及重要的容器和beanFactory的继承关系&#xff0c;为后续这些细节挖掘提供一点理解基础。掌握总体脉络是必要的&#xff0c;接下来的每一章都是从总体脉络中&#xff0c; 去研究之前没看的一些重要…

WPF使用OpenCvSharp4

WPF使用OpenCvSharp4 创建项目安装OpenCvSharp4 创建项目 安装OpenCvSharp4 在解决方案资源管理器中&#xff0c;右键单击项目名称&#xff0c;选择“管理 NuGet 包”。搜索并安装以下包&#xff1a; OpenCvSharp4OpenCvSharp4.ExtensionsOpenCvSharp4.runtime.winSystem.Man…

TCP-UDP调试工具推荐:Socket通信测试教程(附详细图解)

前言 在网络编程与应用开发中&#xff0c;调试始终是一项不可忽视的重要环节。尤其是在涉及TCP/IP、UDP等底层网络通信协议时&#xff0c;如何确保数据能够准确无误地在不同节点间传输&#xff0c;是许多开发者关注的核心问题。 调试的难点不仅在于定位连接建立、数据流控制及…

【新方法】通过清华镜像源加速 PyTorch GPU 2.5安装及 CUDA 版本选择指南

下面详细介绍所提到的两条命令&#xff0c;它们的作用及如何在你的 Python 环境中加速 PyTorch 等库的安装。 1. 设置清华镜像源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple这条命令的作用是将 pip &#xff08;Python 的包管理工具&#xf…

【数据结构】单链表的使用

单链表的使用 1、基本概念2、链表的分类3、链表的基本操作a、单链表节点设计b、单链表初始化c、单链表增删节点**节点头插&#xff1a;****节点尾插&#xff1a;****新节点插入指定节点后&#xff1a;**节点删除&#xff1a; d、单链表修改节点e、单链表遍历&#xff0c;并打印…

虚幻引擎是什么?

Unreal Engine&#xff0c;是一款由Epic Games开发的游戏引擎。该引擎主要是为了开发第一人称射击游戏而设计&#xff0c;但现在已经被成功地应用于开发模拟游戏、恐怖游戏、角色扮演游戏等多种不同类型的游戏。虚幻引擎除了被用于开发游戏&#xff0c;现在也用于电影的虚拟制片…

Linux(Centos 7.6)yum源配置

yum是rpm包的管理工具&#xff0c;可以自动安装、升级、删除软件包的功能&#xff0c;可以自动解决软件包之间的依赖关系&#xff0c;使得用户更方便软件包的管理。要使用yum必须要进行配置&#xff0c;个人将其分为三类&#xff0c;本地yum源、局域网yum源、第三方yum源&#…

Linux上更新jar包里的某个class文件

目标&#xff1a;替换voice-1.0.jar里的TrackHandler.class文件 一.查询jar包里TrackHandler.class所在的路径 jar -tvf voice-1.0.jar |grep TrackHandler 二.解压出TrackHandler.class文件 jar -xvf voice-1.0.jar BOOT-INF/classes/com/yf/rj/handler/TrackHandler.cla…

机器学习中回归预测模型中常用四个评价指标MBE、MAE、RMSE、R2解释

在机器学习中&#xff0c;评估模型性能时常用的四个指标包括平均绝对误差&#xff08;Mean Absolute Error, MAE&#xff09;、均方误差&#xff08;Mean Squared Error, MSE&#xff09;、均方根误差&#xff08;Root Mean Squared Error, RMSE&#xff09;和决定系数&#xf…

基于SpringBoot的Jwt认证以及密码aes加密解密技术

目录 前言 1.SpringBoot项目的创建 2.相关技术 3.项目架构 4.项目关键代码 5.项目最终的运行效果 ​编辑 6.PostMan测试接口结果 前言 学习了SpringBoot之后&#xff0c;才觉得SpringBoot真的很方便&#xff0c;相比传统的SSH&#xff0c;SSM&#xff0c;SpringBo…

Spark SQL DML语句

【图书介绍】《Spark SQL大数据分析快速上手》-CSDN博客 《Spark SQL大数据分析快速上手》【摘要 书评 试读】- 京东图书 Spark本地模式安装_spark3.2.2本地模式安装-CSDN博客 DML&#xff08;Data Manipulation Language&#xff0c;数据操作语言&#xff09;操作主要用来对…

线性直流电流

电阻网络的等效 等效是指被化简的电阻网络与等效电阻具有相同的 u-i 关系 (即端口方程)&#xff0c;从而用等效电阻代替电阻网络之后&#xff0c;不 改变其余部分的电压和电流。 串联等效&#xff1a; 并联等效&#xff1a; 星角变换 若这两个三端网络是等效的&#xff0c;从任…

B站推荐模型数据流的一致性架构

01 背景 推荐系统的模型&#xff0c;通过学习用户历史行为来达到个性化精准推荐的目的&#xff0c;因此模型训练依赖的样本数据&#xff0c;需要包括用户特征、服务端推荐的视频特征&#xff0c;以及用户在推荐视频上是否有一系列的消费行为。 推荐模型数据流&#xff0c;即为…

【LeetCode】839、相似字符串组

【LeetCode】839、相似字符串组 文章目录 一、并查集1.1 并查集 二、多语言解法 一、并查集 1.1 并查集 求共有几组, 联想到并查集, 即并查集有几个集合 字符串相似: 相差0个字符, 或2个字符 其中所有字符串长度都相同, 是比较方便处理的 // go var sets int var father […

官宣!低空经济司,挂牌成立!

近日&#xff0c;国家发展改革委网站“机关司局”栏目悄然更新&#xff0c;一个新设立的部门——低空经济发展司&#xff08;简称“低空司”&#xff09;正式进入公众视野。低空司的成立&#xff0c;无疑是对当前国家经济发展形势的深刻把握和前瞻布局。 低空经济是以各类低空飞…

不安全物联网的轻量级加密:综述

Abstract 本文综述了针对物联网&#xff08;IoT&#xff09;的轻量级加密解决方案。这项综述全面覆盖了从轻量级加密方案到不同类型分组密码的比较等多个方面。同时&#xff0c;还对硬件与软件解决方案之间的比较进行了讨论&#xff0c;并分析了当前最受信赖且研究最深入的分组…

【小程序】全局数据共享

目录 全局数据共享 1. 什么是全局数据共享 2. 小程序中的全局数据共享方案 全局数据共享 - MobX 1. 安装 MobX 相关的包 2. 创建 MobX 的 Store 实例 3. 将 Store 中的成员绑定到页面中 4. 在页面上使用 Store 中的成员 ​5. 将 Store 中的成员绑定到组件中 6. 在组件中…

自动化测试- 自动化测试模型

目录 自动化测试模型简介 1、线性模型 举例 测试页面html文件 测试脚本 2. 关键字驱动测试&#xff08;Keyword-Driven Testing&#xff09; 需测试内容 关键字驱动测试框架 创建测试用例文件 运行测试 3. 数据驱动测试&#xff08;Data-Driven Testing&#xff09; …

【GlobalMapper精品教程】091:根据指定字段融合图斑(字段值相同融合到一起)

文章目录 一、加载数据二、符号化三、融合图斑1. 根据图斑位置进行融合2. 根据指定字段四、注意事项一、加载数据 订阅专栏后,从私信中查收配套实验数据包,找到data091.rar,解压并加载,如下图所示: 属性表如下: 二、符号化 为了便于比对不同的融合结果,查看属性表根据…

strace工具使用

下载地址&#xff1a; https://github.com/strace/strace/releases/tag/v6.12 解压后执行以下命令 ./configure --hostarm-linux --prefix/home/wei/Code/strace/strace-6.12/out CC/home/wei/Code/firmware/prebuilts/host/gcc/gcc-arm-10.2-2020.11-x86_64-arm-none-linux…