Java-121-log4j2-1-认识log4j2之Appender

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 认识下log4j2!

认识下log4j2!

log4j2中有哪些东西呢?

基本的xml结构如下:

<?xmlversion="1.0"encoding="UTF-8"?>;
<Configuration><!--自定义属性--><Properties><Propertyname="自定义属性键">自定义属性值</property>    ...
</Properties><!--定义日志输出到哪和怎么输出--><Appenders><Appendertype="type"name="name"><Filtertype="type" ... /></Appender>    ...
</Appenders><!--日志处理器用这个的实例去关联业务日志--><Loggers><Rootlevel="level"><AppenderRefref="name"/></Root><Loggername="name1"><Filtertype="type" ... /></Logger>    ...
</Loggers></Configuration>

第一行首先是标识这是一个xml文件

<?xmlversion="1.0"encoding="UTF-8"?>

接下来是一个<Configuration>标签,有两个属性:

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

设置为debug可以在控制台中看到Log4j2启动和加载配置文件时的打印信息。

monitorInterval是用来设置配置文件的动态加载时间的,单位是秒。

monitorInterval="30"表示每30秒配置文件会动态加载一次。在程序运行过程中,如果修改配置文件,程序会随之改变。

<configurationstatus="debug"monitorInterval="30">  ...
</Configuration>

所有的配置都在<Configuration>标签里:

Appender:日志输出目的

负责日志的输出配置,比如可以配置输出到控制台、文件等等。也可以在这里面使用Layout去对对输出的日志进行格式化。还可以配置过滤掉一些日志等等,详见后面的配置。

Logger:日志记录器

负责收集处理日志记录,处理日志开关。


注意:

   一个Logger可以对应多个appender,一个appender里只能对应一个layout来配置输出的格式。

   Logger+Appender+Layout三个组件就定义出了我们的日志输出规则,通俗点就是Logger实例将Layout格式的日志输出到Appender规定的地方!

下面来详细看下这三大组件!

一、Appender(输出源)

   Appenders是输出源,用于定义日志输出的地方。

常见的有:

Console:将日志打印到控制台上。

File:将日志打印到文件。

RollingFile:同样是打印到文件,不过会根据策略覆盖旧文件。

JDBC:日志打到数据库

JMS

Async:异步输出

RandomAccessFile:类似File,只不过是字节,不是流。

RollingRandomAccessFile:滚动生成文件。

下面详细看看这些输出源:


Console:将日志打印到控制台上,开发必备

属性:

name:指定Appender的名字。target:SYSTEM_OUTSYSTEM_ERR,一般只设置默认:SYSTEM_OUT。PatternLayout:输出格式,不设置默认为:%m%n。

2.File:文件输出源。用于将日志写入到指定的文件,比如D:/logs/my.log。底层是一个OutputStreamAppender。

   属性:

name:File的属性,指定Appender的名字.
fileName:File的属性,指定输出日志的目的文件带全路径的文件名.
PatternLayout:File的子节点,输出格式,不设置默认为:%m%n.

3.RollingFile:同样是打印到文件,超过指定大小自动删除旧的创建新的的

   属性:

name:RollingFilede的属性,指定Appender的名字.
fileName:RollingFilede的属性,指定输出日志的目的文件带全路径的文件名.
filePattern:RollingFilede的属性,指定新建日志文件的名称格式.
<!--info级别日志文件输出--><RollingFilename="info_appender"fileName="${log_root}/info.log"filePattern="${log_root}/info_%i.log.%d{yyyy-MM-dd}"><!--DefaultRolloverStrategy:RollingFilede的子节点,用来指定同一个文件夹下最多有几个日志文件时开始删除最旧的,创建新的(通过max属性)--><!--过滤器Filters:RollingFilede的子节点,决定日志事件能否被输出。过滤条件有三个值:ACCEPT(接受), DENY(拒绝) orNEUTRAL(中立)
ACCEP和DENY比较好理解就是接受和拒绝的意思,在使用单个过滤器的时候,一般就是使用这两个值。但是在组合过滤器中,如果用接受ACCEPT的话,日志信息就会直接写入日志文件,后续的过滤器不再进行过滤。所以,在组合过滤器中,接受使用NEUTRAL(中立),被第一个过滤器接受的日志信息,会继续用后面的过滤器进行过滤,只有符合所有过滤器条件的日志信息,才会被最终写入日志文件。--><Filters><!--限制日志级别在info及以上在error以下ThresholdFilter:Filters的子节点level:ThresholdFilterde的属性,将被过滤的级别。onMatch:ThresholdFilterde的属性,默认值是NEUTRALonMismatch:ThresholdFilterde的属性,默认是DENY--><ThresholdFilterlevel="info"/><ThresholdFilterlevel="error"onMatch="DENY"onMismatch="NEUTRAL"/></Filters><!--日志格式输出格式,不设置默认为:%m%n.--><PatternLayoutpattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/><!--策略Policies:RollingFilede的子节点,指定滚动日志的策略,就是什么时候进行新建日志文件输出日志.--><Policies><!--每隔一天转存TimeBasedTriggeringPolicy:Policies子节点,基于时间的滚动策略,interval属性用来指定多久滚动一次,默认是1hour。modulate=true用来调整时间:比如现在是早上3am,interval是4,那么第一次滚动是在4am,接着是8am,12am...而不是7am.--><TimeBasedTriggeringPolicyinterval="1"modulate="true"/><!--文件大小SizeBasedTriggeringPolicy:Policies子节点,基于指定文件大小的滚动策略,size属性用来定义每个日志文件的大小.--><SizeBasedTriggeringPolicysize="100 MB"/></Policies></RollingFile>


4.Async:异步输出。接受对其他Appender的引用,并使LogEvents在单独的Thread上写入它们。

默认情况下,Async使用 java.util.concurrent.ArrayBlockingQueue ,它不需要任何外部库。

请注意,多线程应用程序在使用此appender时应小心:阻塞队列容易受到锁争用的影响,当更多线程同时记录时性能可能会变差。考虑使用无锁异步记录器以获得最佳性能。

5.RandomAccessFile类似于标准的 File。内部它使用 ByteBuffer + RandomAccessFile 而不是 BufferedOutputStream。与File相比,性能提升了20-200% 。


6.RollingRandomAccessFile同RollingFile。

写入fileName参数中指定的文件,并根据TriggeringPolicy和RolloverPolicy滚动文件。

不同的是比File更加强大,可以指定当文件达到一定大小(如20MB)时,另起一个文件继续写入日志,另起一个文件就涉及到新文件的名字命名规则,因此需要配置文件命名规则。避免一直往一个文件中写。

name:指定Appender的名字。fileName指定当前日志文件的位置和文件名称filePattern指定当发生Rolling时,文件的转移和重命名规则immediateFlush设置为true时-默认值,每次写入后都会进行刷新。这将保证数据写入磁盘,但可能会影响性能。bufferSize缓冲区大小,默认为262,144字节(256*1024)。Policies:指定滚动日志的策略,就是什么时候进行新建日志文件输出日志。SizeBasedTriggeringPolicy指定当文件大小大于size指定的值时,触发RollingTimeBasedTriggeringPolicy这个配置需要和filePattern结合使用,日期格式精确到哪一位,interval也精确到哪一个单位。注意filePattern中配置的文件重命名规则是${FILE_NAME}-%d{yyyy-MM-ddHH-mm-ss}-%i,最小的时间粒度是ss,即秒钟。TimeBasedTriggeringPolicy默认的size是1,结合起来就是每1秒钟生成一个新文件。如果改成%d{yyyy-MM-ddHH},最小粒度为小时,则每一个小时生成一个文件DefaultRolloverStrategy指定最多保存的文件个数


总结:

   做日志分割的话,肯定是RollingRandomAccessFile最合适。实战就用它!后面的文章中会贴出来。


END

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
19天前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
156 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
1月前
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
245 3
|
3月前
|
Java Apache 开发工具
【Azure 事件中心】 org.slf4j.Logger 收集 Event Hub SDK(Java) 输出日志并以文件形式保存
【Azure 事件中心】 org.slf4j.Logger 收集 Event Hub SDK(Java) 输出日志并以文件形式保存
|
29天前
|
人工智能 Oracle Java
解决 Java 打印日志吞异常堆栈的问题
前几天有同学找我查一个空指针问题,Java 打印日志时,异常堆栈信息被吞了,导致定位不到出问题的地方。
34 2
|
2月前
|
Java
日志框架log4j打印异常堆栈信息携带traceId,方便接口异常排查
日常项目运行日志,异常栈打印是不带traceId,导致排查问题查找异常栈很麻烦。
|
3月前
|
Java 应用服务中间件 HSF
Java应用结构规范问题之配置Logback以仅记录错误级别的日志到一个滚动文件中的问题如何解决
Java应用结构规范问题之配置Logback以仅记录错误级别的日志到一个滚动文件中的问题如何解决
|
3月前
|
Java 应用服务中间件 HSF
Java应用结构规范问题之配置Logback以在控制台输出日志的问题如何解决
Java应用结构规范问题之配置Logback以在控制台输出日志的问题如何解决
|
3月前
|
Java 应用服务中间件 HSF
Java应用结构规范问题之AllLoggers接口获取异常日志的Logger实例的问题如何解决
Java应用结构规范问题之AllLoggers接口获取异常日志的Logger实例的问题如何解决
|
3月前
|
XML Java Maven
Spring5入门到实战------16、Spring5新功能 --整合日志框架(Log4j2)
这篇文章是Spring5框架的入门到实战教程,介绍了Spring5的新功能——整合日志框架Log4j2,包括Spring5对日志框架的通用封装、如何在项目中引入Log4j2、编写Log4j2的XML配置文件,并通过测试类展示了如何使用Log4j2进行日志记录。
Spring5入门到实战------16、Spring5新功能 --整合日志框架(Log4j2)
|
3月前
|
存储 消息中间件 监控
Java日志详解:日志级别,优先级、配置文件、常见日志管理系统ELK、日志收集分析
Java日志详解:日志级别,优先级、配置文件、常见日志管理系统、日志收集分析。日志级别从小到大的关系(优先级从低到高): ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF 低级别的会输出高级别的信息,高级别的不会输出低级别的信息
下一篇
无影云桌面