Log4j2-11-log4j2 Layout 布局入门介绍

Layout 布局

Appender使用Layout将LogEvent格式化为一种表单,以满足将要消费日志事件的任何需求。

在Log4j中。x和Logback布局被期望将事件转换为字符串。

在Log4j 2布局返回一个字节数组。这使得Layout的结果可以在更多类型的appender中使用。然而,这意味着您需要配置大多数布局与Charset,以确保字节数组包含正确的值。

使用Charset的布局的根类是org.apache.logging.log4j.core.layout。其中默认是UTF-8。每个扩展AbstractStringLayout的布局都可以提供自己的默认值。请参阅下面的每个布局。

Log4j 2.4.1为ISO-8859-1和US-ASCII字符集添加了一个自定义字符编码器,以便将Java 8内置的一些性能改进带到Log4j中,以便在Java 7上使用。对于只记录ISO-8859-1字符的应用程序,指定此字符集将显著提高性能。

CSV布局

该布局创建逗号分隔值(CSV)记录,并需要Apache Commons CSV。

CSV布局可以以两种方式使用:首先,使用CsvParameterLayout记录事件参数,以创建自定义数据库,通常记录到为此目的唯一配置的日志记录器和文件附加程序。其次,使用CsvLogEventLayout记录事件以创建数据库,作为使用完整的DBMS或使用支持CSV格式的JDBC驱动程序的替代方案。

CsvParameterLayout将事件的参数转换为CSV记录,忽略消息。

要记录CSV记录,您可以使用常用的Logger方法info(), debug()等:

logger.info("Ignored", value1, value2, value3);

得到 csv 格式:

value1, value2, value3

个人理解

csv 格式不太适合,因为日志中很多信息都会出现。

JSON布局

注意:JsonTemplate被认为已弃用。JsonTemplateLayout 提供了更多的功能,应该使用它。

附加一系列JSON事件作为序列化为字节的字符串。

完整格式良好的JSON vs.片段JSON

如果配置complete=“true”,则追加器输出格式良好的JSON文档。

默认情况下,使用complete=“false”,您应该将输出作为外部文件包含在单独的文件中,以形成格式良好的JSON文档。

如果complete=“false”,则appender不会在文档的开头、“]“和末尾写入JSON开放数组字符”[”,也不会在记录之间写入逗号","。

模式

日志事件遵循以下模式:

{"instant" : {"epochSecond" : 1493121664,"nanoOfSecond" : 118000000},"thread" : "main","level" : "INFO","loggerName" : "HelloWorld","marker" : {"name" : "child","parents" : [ {"name" : "parent","parents" : [ {"name" : "grandparent"} ]} ]},"message" : "Hello, world!","thrown" : {"commonElementCount" : 0,"message" : "error message","name" : "java.lang.RuntimeException","extendedStackTrace" : [ {"class" : "logtest.Main","method" : "main","file" : "Main.java","line" : 29,"exact" : true,"location" : "classes/","version" : "?"} ]},"contextStack" : [ "one", "two" ],"endOfBatch" : false,"loggerFqcn" : "org.apache.logging.log4j.spi.AbstractLogger","contextMap" : {"bar" : "BAR","foo" : "FOO"},"threadId" : 1,"threadPriority" : 5,"source" : {"class" : "logtest.Main","method" : "main","file" : "Main.java","line" : 29}
}

个人理解

如果我们相对日志进行分析处理,那么输出 json 格式,其实还是很方便的。

不过 json 相对 pattern 而言,内容会多一些。

一般可以把固定的内容放在前面,从而直接截断解析即可。

模式布局 Pattern Layout

灵活的布局,可配置模式字符串。这个类的目标是格式化LogEvent并返回结果。结果的格式取决于转换模式。

转换模式与c语言中printf函数的转换模式密切相关。转换模式由字面文本和称为转换说明符的格式控制表达式组成。

注意,任何文本,包括特殊字符,都可以包含在转换模式中。特殊字符包括 \t、\n、\r、\f。使用 \\ 在输出中插入一个反斜杠。

每个转换说明符都以百分号(%)开头,后跟可选的格式修饰符和转换字符。转换字符指定数据的类型,例如类别、优先级、日期、线程名称。格式修饰符控制诸如字段宽度、填充、左右对齐等内容。下面是一个简单的例子。

让转换模式为 %-5p [%t]: %m%n,并假设Log4j环境被设置为使用PatternLayout。然后是语句

Logger logger = LogManager.getLogger("MyLogger");
logger.debug("Message 1");
logger.warn("Message 2");

可以得到:

DEBUG [main]: Message 1
WARN  [main]: Message 2

PatternLayout Parameters

Parameter NameTypeDescription
charsetString将syslog字符串转换为字节数组时使用的字符集。字符串必须是有效的字符集。如果未指定,此布局将使用平台默认字符集。
patternString由下表中的一个或多个转换模式组成的组合模式字符串。不能用模式选择器指定。
patternSelectorPatternSelector一个组件,用于分析LogEvent中的信息并确定应该使用哪种模式来格式化事件。pattern和patternSelector参数是互斥的。
replaceRegexReplacement允许替换部分结果字符串。如果已配置,则replace元素必须指定要匹配的正则表达式和替换。它执行一个类似于RegexReplacement转换器的功能,但是它应用于整个消息,而转换器仅应用于其模式生成的String。
alwaysWriteExceptionsboolean如果为真(默认情况下是这样),即使模式不包含异常转换,也总是写入异常。这意味着,如果您没有在模式中包含输出异常的方法,那么默认的异常格式化程序将被添加到模式的末尾。将其设置为false将禁用此行为,并允许您从模式输出中排除异常。
headerString要包含在每个日志文件顶部的可选头字符串。
footerString要包含在每个日志文件底部的可选页脚字符串。
disableAnsiboolean如果为true(默认为false),则不输出ANSI转义码。
noConsoleNoAnsiboolean如果为true(默认为false)且System.console()为null,则不输出ANSI转义码。

个人理解

这里可以指定自己的 replace 策略。

然后 RewriteAppender 也支持,我们可以有多种方式实现。

灵活性

@Plugin(name = "replace",category = "Core",printObject = true
)
public final class RegexReplacement {private static final Logger LOGGER = StatusLogger.getLogger();private final Pattern pattern;private final String substitution;private RegexReplacement(Pattern pattern, String substitution) {this.pattern = pattern;this.substitution = substitution;}public String format(String msg) {return this.pattern.matcher(msg).replaceAll(this.substitution);}

这里是直接把 regex 对应的信息转换为固定的 substitution。

如果我们想把手机号掩盖中间4位,感觉就不是很适合。

应该还是重写 RewritePolicy 比较灵活。

RFC5424布局

顾名思义,Rfc5424Layout按照RFC 5424(增强的Syslog规范)格式化LogEvents。

尽管该规范主要针对通过Syslog发送消息,但这种格式对于其他目的非常有用,因为项目在消息中作为自描述键/值对传递。

序列化的布局

SerializedLayout使用Java序列化简单地将LogEvent序列化为字节数组。SerializedLayout不接受任何参数。

此布局自2.9版起已弃用。Java序列化具有固有的安全性弱点,不再推荐使用这种布局。另一个包含相同信息的布局是JsonLayout,配置了properties=“true”。

Syslog布局

SyslogLayout将LogEvent格式化为与Log4j 1.2使用的相同格式匹配的BSD Syslog记录。

参考资料

https://logging.apache.org/log4j/2.x/manual/layouts.html

在这里插入图片描述

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

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

相关文章

[机器学习]简单线性回归——最小二乘法

一.线性回归及最小二乘法概念 2.代码实现 # 0.引入依赖 import numpy as np import matplotlib.pyplot as plt# 1.导入数据 points np.genfromtxt(data.csv, delimiter,) # points[0,0]# 提取points中的两列数据,分别作为x,y x points[:, 0] y poi…

Netty源码三:NioEventLoop创建与run方法

1.入口 会调用到父类SingleThreadEventLoop的构造方法 2.SingleThreadEventLoop 继续调用父类SingleThreadEventExecutor的构造方法 3.SingleThreadEventExecutor 到这里完整的总结一下: 将线程执行器保存到每一个SingleThreadEventExcutor里面去创建了MpscQu…

安卓滚动视图ScrollView

<?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:orientatio…

docker镜像命令

docker images 列表本机上的镜像 - REPOSITORY&#xff1a;表示镜像的仓库源 - TAG&#xff1a;镜像的标签 - IMAGE ID&#xff1a;镜像 - ID CREATED&#xff1a;镜像创建时间 - SIZE&#xff1a;镜像大小 同一仓库源可以有多个 TAG&#xff0c;代表这个仓库源的不同个版本&am…

大洋钻探系列之七中国大洋钻探船梦想号

中国大洋钻探梦想号2021年11月30日开工建造&#xff0c;2023年12月27日在珠江口海域完成首航&#xff0c;预计2024年正式交付使用&#xff0c;从而实现了2011年中国IODP专家咨询委员会提出的我国大洋钻探发展“三步走”战略的第三步建造中国的大洋钻探船。 恰逢IODP新旧计划交替…

vue3 + vite:打包部署后,动态组件渲染404问题解决

问题描述: 当需要渲染动态组件,动态的组件路径配置在数据库中时,如下图,本地运行能正常访问,用vite打包部署后,生产上改路径为404. 起初认为是,vite打包后的文件都是.js, 当页面加载后从数据库拿来的路径是.vue, 并且是src/xxx/xxx.vue 这种绝对路径形式的,所以就找不…

【每日一题】 2024年1月汇编

&#x1f525;博客主页&#xff1a; A_SHOWY&#x1f3a5;系列专栏&#xff1a;力扣刷题总结录 数据结构 云计算 数字图像处理 力扣每日一题_ 【1.4】2397.被列覆盖的最多行数 2397. 被列覆盖的最多行数https://leetcode.cn/problems/maximum-rows-covered-by-columns/ 这…

哪个牌子的头戴式耳机好?推荐性价比高的头戴式耳机品牌

随着科技的不断发展&#xff0c;耳机市场也呈现出百花齐放的态势&#xff0c;从高端的奢侈品牌到亲民的平价品牌&#xff0c;各种款式、功能的耳机层出不穷&#xff0c;而头戴式耳机作为其中的一员&#xff0c;凭借其优秀的音质和降噪功能&#xff0c;受到了广大用户的喜爱&…

ArrayList在添加元素时报错java.lang.ArrayIndexOutOfBoundException

一、添加单个元素数组越界分析 add源码如下 public boolean add(E e) {ensureCapacityInternal(size 1); // Increments modCount!!elementData[size] e;return true; } size字段的定义 The size of the ArrayList (the number of elements it contains). ArrayList的大…

雷达DoA估计的跨行业应用--麦克风阵列声源定位(Matlab仿真)

一、概述 麦克风阵列&#xff1a; 麦克风阵列是由一定数目的声学传感器&#xff08;麦克风&#xff09;按照一定规则排列的多麦克风系统&#xff0c;而基于麦克风阵列的声源定位是指用麦克风拾取声音信号&#xff0c;通过对麦克风阵列的各路输出信号进行分析和处理&#xff0c;…

力扣hot100 跳跃游戏 贪心

Problem: 55. 跳跃游戏 文章目录 思路复杂度Code 思路 &#x1f468;‍&#x1f3eb; 参考 挨着跳&#xff0c;记录最远能到达的地方 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( 1 ) O(1) O(1) Code class Solution {public boolean canJump(int[] nums)…

7 STL

1、STL简介 1.1基本概念 可复用利用的东西&#xff01; 面向对象和泛型编程&#xff08;模板&#xff09;的 目的->提升复用性 为了建立数据结构和算法的一套标准->STL横空出世 STL(Standard Template Liberary)标准模板库广义分&#xff1a;容器、算法、迭代器容器…

lwIP 初探(第一节)

一、TCP/IP 协议栈架构 网络协议有很多&#xff0c;如 MQTT、TCP、UDP、IP 等协议&#xff0c;这些协议组成了 TCP/IP 协议栈&#xff0c; 同时&#xff0c;这些协议具有层次性&#xff0c;它们分布在应用层&#xff0c;传输层和网络层。TCP/IP 协议栈的分层结 构和网络协议得…

百无聊赖之JavaEE从入门到放弃(十五)包装类

目录 一.包装类概念 二.自动装箱和拆箱 三.包装类的缓存问题 一.包装类概念 基本数据类型的包装类 我们前面学习的八种基本数据类型并不是对象&#xff0c;为了将基本类型数据和对象之间实现互 相转化&#xff0c;Java 为每一个基本数据类型提供了相应的包装类。 Java 是…

八斗学习笔记

1 初始环境安装 Anaconda安装(一款可以同时创建跟管理多个python环境的软件) https://blog.csdn.net/run_success/article/details/134656460 Anaconda创建一个新python环境(安装人工智能常用的第三方python包&#xff0c;如&#xff1a;tensorflow、keras、pytorch) https://…

12nm工艺,2.5GHz频率,低功耗Cortex-A72处理器培训

“ 12nm工艺&#xff0c;2.5GHz频率&#xff0c;低功耗Cortex-A72处理器培训” 本项目是真实项目实战培训&#xff0c;低功耗UPF设计&#xff0c;后端参数如下&#xff1a; 工艺&#xff1a;12nm 频率&#xff1a;2.5GHz 资源&#xff1a;2000_0000 instances 为了满足更多…

中科大计网学习记录笔记(二):网络核心

前言&#xff1a; 学习视频&#xff1a;中科大郑烇、杨坚全套《计算机网络&#xff08;自顶向下方法 第7版&#xff0c;James F.Kurose&#xff0c;Keith W.Ross&#xff09;》课程 该视频是B站非常著名的计网学习视频&#xff0c;但相信很多朋友和我一样在听完前面的部分发现信…

科技云报道:云原生PaaS,如何让金融业数字化开出“繁花”?

科技云报道原创。 在中国金融业数字化转型的历史长卷中&#xff0c;过去十年无疑是一部磅礴的史诗。 2017年&#xff0c;南京银行第一次将传统线下金融业务搬到了线上。那一年&#xff0c;它的互联网金融信贷业务实现了过去10年的业务总额。 2021年&#xff0c;富滇银行通过…

Parrot系统下ROS1试用CoCubeSim

Ubuntu 22.04安装和使用ROS1可行吗_ubuntu22.04安装ros1-CSDN博客 Parrot系统 如果你还不了解这个系统&#xff0c;如下文字就不用接着看了。 为何使用 为何更好的应用各类互联网信息&#xff0c;仅此而已。 开发利器 终端 ROS1和ROS2支持所有操作系统&#xff0c;支持的硬件…

【金蝶BI方案】用一张报表,分析生产完成情况

当老板问生产完成地怎样&#xff1f;难道还能拿出一叠报表让老板逐个细看&#xff1f;奥威-金蝶BI方案只用一张BI数据可视化报表就把整个生产完成情况给讲明白了。甚至还能满足老板想从不同角度进行分析的需求。 奥威-金蝶BI方案-BI生产完成情况报表 这张报表总结计算了生产合…