前言
Appender按网络释义,有“输出目的地”之意。官网给出的定义是:“Appenders are responsible for delivering LogEvents to their destination.”。Log4j2为使用者提供了13种非常实用的Appenders,使用者可用方便的调用这13种Appender来控制日志的输出。
摘要
Log4j2的Appenders充分考虑了日志事件的输出、包装以及过滤转发的可能,包括最基本的输出到本地文件、输出到远程主机,对文件进行封装、注入,并且还能按照日志文件的时间点、文件大小等条件进行自动封存。例如,想要将几个不同源的日志汇集到一起,可以用FlumeAppender;想要在LogEvent中注入信息,可以用RewriteAppender;想要让系统按照设定的时间间隔自动封存日志信息,可以用RollingFileAppender(每隔一定时间自动保存一份新增的日志文件,并按照时间戳等指定格式命名);当产生安全级别达ERROR或FATAL的LogEvent时,给维护人员发送邮件可用SMTPAppender;希望将日志信息写到远程主机的,可用SocketAppender;希望能够按照RFC5424格式向远程主机发送日志信息,可用SyslogAppender。等等。
下面将按照如下顺序依次介绍每个Appender的作用及重要参数,并附上完整参数地址及官网配置示例地址。
目录
1、FileAppender 普通地输出到本地文件
2、FlumeAppender 将几个不同源的日志汇集、集中到一处。
3、JMSQueueAppender VS. JMSTopicAppender 与JMS相关的日志输出
4、RewriteAppender 对日志事件进行掩码或注入信息
5、RollingFileAppender 对日志文件进行封存(详细)
6、RoutingAppender 在输出地之间进行筛选路由
7、SMTPAppender 将LogEvent发送到指定邮件列表
8、SocketAppender 将LogEvent以普通格式发送到远程主机
9、SyslogAppender 将LogEvent以RFC 5424格式发送到远程主机
10、AsynchAppender 将一个LogEvent异步地写入多个不同输出地
11、ConsoleAppender 将LogEvent输出到命令行
12、FailoverAppender 维护一个队列,系统将尝试向队列中的Appender依次输出LogEvent,直到有一个成功为止
正文:
1、FileAppender
FileAppender用于将LogEvent写入到一个文件中,该文件由fileName参数指定。有几个重要的参数:
① fileName,String,指定写入的log文件的名称。
② append,boolean,指定是否是追加写入(append=true,默认情况),还是覆盖写入(append=false)。
③ bufferedIO,boolean,是否对数据进行缓冲到缓冲区满后再写入。测试显示,即使在启用immediateFlush的情况下,设置bufferedIO=true也能提高性能。
④ locking,boolean,是否对文件上锁,当有多个线程可能同时写该文件时需要考虑上锁(在《异常处理反模式》中就提到要把在一起的日志输出语句写到一句,而不是拆成几句来避免并发线程导致的日志语句之间的错位)。但对文件上锁会影响系统的性能,所以需要谨慎使用。默认值是false。
2、FlumeAppender
FlumeAppender是一个可选的组件,它并不包含在core jar中,若要使用,需要额外加入log4j-flume-ng-2.0-beta4.jar包。FlumeAppender是配合Apache Flume来使用的。Apache Flume是一个能有效地将不同地方的大量日志数据收集、聚会到一起的一个系统。详细信息参见【Apache Flume】
几个比较重要的参数:
① agents,Agent[],用来维护一个将接收log event的数组,如果数组中agent的数量大于1,那么将把第一个agent视为primary agent,剩下的为备选agent。当第一个agent无法连接时,将把log event发送给备选agent。
② batchSize,integer,一次给agent发送的log event的个数。
③ compress,boolean,当设置为true时,发送的message将使用gzip进行压缩。
3、JMSQueueAppender VS. JMSTopicAppender
JMSQueueAppender的作用是将格式化的log event发送到JMSQueue上,同样的,JMSTopicAppender的作用是将格式化的log event发送到JMSTopic上。JMSQueue和JMSTopic的区别是,JMSQueue只将一个message发送给一个consumer,而JMSTopic是将一个message发布(publish)给所有订阅了这个message的订阅者(subscribe)。更详细的两者间的区别可以【戳这里】
几个重要的参数:
JMSQueueAppender:
① queueBindingName,String, 用来定位queue。
② factoryBindingName,String, 用来定位产生上下文信息的QueueConnectionFactory。
JMSTopicAppender:
① topicBindingName,String, 用来定位topic。
② factoryBindingName,String, 用来定位产生上下文信息的QueueConnectionFactory。
4、RewriteAppender
RewriteAppender可以让符合筛选条件的log event在被其他appender输出前被加工一下,比如对message中的密码进行掩码,或者向message中注入信息等。RewriteAppender需要一个RewritePolicy来指定重写的规则。
几个重要的参数:
① appender-ref,String,指定被重写后的log event将发往哪个appender。
② rewritePolicy,RewritePolciy,用来描述重写log event的规则。
RewritePolicy:
RewritePolicy是一个接口,有一个需要实现的方法名为rewrite,该方法接收一个log event对象作为参数,然后经过函数处理后返回该log event或新建一个log event返回。
Log4j2中已实现的两种RewritePolicy有MapRewritePolicy和PropertiesRewritePolicy。
【完整的参数设置、已实现的RewritePolicy和官方配置示例】
5、RollingFileAppender
RollingFileAppender是一个非常有意思的输出器。它将log信息写入一个文件后,会判断是否满足封存文件的要求,若满足,则除非封存文件的动作。RollingFileAppender需要TriggeringPolicy来指定触发封存的条件,另外还需要RolloverStrategy来告诉输出器如何封存文件。
Log4j2中已提供的TriggeringPolicy有如下四种:
① CompositeTriggeringPolicy
复合型触发策略。即将多个触发条件逻辑或到一起,只要其中一个条件满足,则触发封存动作。
② OnStartup Triggering Policy
这一触发策略不需要参数设置,它会自行判断log文件的创建时间和JVM的启动时间。若log文件的创建时间早于JVM的启动时间,则将原来的log文件封存,然后创建一个新的空白log文件。
③ SizeBased Triggering Policy
这一触发策略基于对log文件大小的判断。当log文件大于设定的阈值时,将触发封存动作。可设定的log文件大小的单位有bytes、KB、MB或GB。
④ TimeBased Triggering Policy
基于时间的触发策略。该策略主要是完成周期性的log文件封存工作。有两个参数:
interval,integer型,指定两次封存动作之间的时间间隔。
modulate,boolean型,说明是否对封存时间进行调制。若modulate=true,则封存时间将以0点为边界进行偏移计算。比如,modulate=true,interval=4hours,那么假设上次封存日志的时间为03:00,则下次封存日志的时间为04:00,之后的封存时间依次为08:00,12:00,16:00,。。。
Log4j2中实现的RolloverStrategy为Default Rollover Strategy,它有三个参数可以设置,分别为:
fileIndex,String,有两个选择“max”或“min”。设置为“max”意味着将最新的日志信息封存在序号较大的封存文件中。“min”则相反。
min,integer,封存文件的序号的起始值。
max,integer,封存文件的序号的最大值。(超过最大值时,将有文件被删除)
相当于min和max两个参数设置了一个保存窗口,超出这个窗口的日志文件将会被删除。
【完整的参数设置、TriggeringPolicy和RolloverStrategy的用法示例】
6、RoutingAppender
通过路由规则来评价一个log event后,决定它下一个被发往的appender。RoutingAppender有一个重要的参数名为routes,是Routes型数据,用来描述该appender的路由规则。
7、SMTPAppender
SMTPAppender主要用来给指定的E-mail发送log event(这种情况一般用在event的安全级别超过ERROR或FATAL时,event的安全分级可以参考【此文】之日志记录小节)。SMTPAppender有很多重要的参数以完成log event发送到指定E-mail。
① bcc,String,由逗号分隔的几个盲抄送地址。(盲抄送就是说收件人的地址不会显示在邮件信息中)
② cc,String,由逗号分隔的几个明抄送地址。(明抄送就是说收件人的地址将显示在邮件信息中)
③ bufferSize,integer,信中所能包含的最大log event的数量。
④ from,String,发件人的地址。
⑤ layout,Layout,log event的布局格式。默认为SerializedLayout。
⑥ replyTo,String,回信的地址。
⑦ smtpHost,String,要发送到的SMTP的主机名。(此参数是必需的)
⑧ smtpPassword,String,通过SMTP服务器所需的密码。
⑨ smtpPort,integer,SMTP服务的端口号。
⑩ smtpProtocol,String,使用的协议。默认为"smtp"。
其他还有smtpUsername(通过SMTP server所需的用户名),to(接收者的邮件地址)等。
8、SocketAppender
将log event输出到一个远程服务器上(需指定服务器名和端口号),数据可以以任意指定的格式经由TCP或UDP协议发送。
SocketAppender中比较重要的参数有:
① host,String,指定服务器的主机名。(必需)
② immediateFlush,boolean,是否立即flush,还是等待缓存到一定大小后在flush。
③ layout,Layout,log event输出的格式。
④ port,integer,远程服务器坚挺log event的应用的端口号。
⑤ protocol,String,发送log event所使用的协议,"TCP" 或"UDP"。
⑥ reconnectionDelay,integer,当连接断开时,延迟等待的ms数。
9、SyslogAppender
SyslogAppender跟SocketAppender一样,是将log event发送到远程服务器上,但是使用的是BSD Syslog格式。关于Syslog格式可以【戳这里】
10、AsynchAppender
将一个LogEvent异步地写入多个不同输出地。在AsynchAppender中有一个参数,名为“appender-ref”,用来指定要发送到的appender的名称。AsynchAppender维护了一个队列,队列中存放了需要异步发送的LogEvent,队列中LogEvent的个数可以通过“bufferSize”参数来指定。另外,还有一个“blocking”参数来指定是否对AsynchAppender的LogEvent队列上锁,如果blocking=true,那么在队列满员的情况下,新到达的LogEvent将等待,直到有空位。若blocking=false,那么在队列满员的情况下,将把新到的LogEvent转到error appender。
11、ConsoleAppender
将LogEvent输出到命令行。有两个比较有意思的参数,一个是layout,用来指定输出字串的格式(format);另一个是target,用来指定输出的是 "SYSTEM_OUT" 还是 "SYSTEM_ERR",默认情况下是"SYSTEM_ERR"。
12、FailoverAppender
维护一个failover appenders队列,系统先尝试一个主appender(primary appender),若不成功,则尝试failover队列中的Appenders,直到有一个成功为止,或都不成功。比较重要的参数有:
primary(String型):用来指定主appender的名称。
failovers(String[]型):一个appender数组,指定的备选的其他appenders。
retryInterval(integer型):用来设定隔多少秒重新尝试主appender,默认为60秒。
参考资料:
相关推荐
Log4j和Log4j2是两种广泛使用的Java日志框架,它们提供了灵活的日志配置和高性能的日志处理能力。本文将详细介绍如何在SpringBoot项目中配置Log4j和Log4j2。 ### SpringBoot与Log4j Log4j是Apache的一个开源项目,...
Log4j2 配置模板学习笔记 Log4j2 是 Java 语言中一种流行的日志记录工具,它提供了灵活的日志记录管理功能。下面我们将学习 Log4j2 配置模板的使用和配置。 引入 Log4j2 依赖 在使用 Log4j2 之前,需要在 Maven ...
首先,错误信息"log4j:WARN No appenders could be found for logger"表明Log4j找不到任何日志输出的目标,也就是没有设置日志appender。日志appender是Log4j用来定义日志输出目的地的组件,比如控制台、文件、邮件...
Log4j2 结合 Slf4j 配置使用 Log4j2 是一个功能强大且广泛使用的日志记录工具,它提供了灵活的日志记录机制和高性能的日志记录能力。Slf4j 则是一个简单的日志记录门面,提供了统一的日志记录接口。今天,我们将...
3. **配置Tomcat**:在`$CATALINA_HOME/lib`目录下添加`log4j-api.jar`和`log4j-slf4j-impl.jar`,这将使Tomcat使用Log4j2作为其内部的日志系统。 4. **排除其他日志实现**:确保你的应用中没有引入其他的日志实现...
- **可扩展性**:Log4j2支持插件架构,可以方便地添加新的Appenders、Filters和Layouts。 - **云原生支持**:Log4j2可以通过JMX或者远程API进行动态配置,适应云环境的需求。 - **安全**:Log4j2在设计时考虑了...
3. **Appenders**:Appenders是Log4j的核心组件之一,负责将日志消息输出到不同的目的地,如控制台、文件、网络、电子邮件等。 4. **Layouts**:Layouts决定了日志事件的格式,如简单的文本格式、XML或JSON,以便于...
- **性能优化**:持续的性能优化是Log4j 2的核心之一,新版本可能包含了对日志处理速度的提升,使得在高并发场景下,日志记录依然能保持流畅。 3. **核心组件**: - **Layouts**:定义了日志事件的输出格式,如...
四、Log4j2配置详解 1. 日志级别:Log4j2支持TRACE、DEBUG、INFO、WARN、ERROR、FATAL和OFF七个级别。通过配置文件,可以设置全局日志级别,也可以针对特定类或包设置不同级别。 2. Appenders:Appender是日志输出...
Log4j2是Apache软件基金会开发的日志框架Log4j的升级版,它具有更高的性能、灵活性和可配置性。Log4j2支持多种日志记录级别(如DEBUG、INFO、WARN、ERROR),并允许通过XML、JSON、YAML或纯Java配置文件进行灵活配置...
此外,Log4j2还支持配置多个Appenders(日志输出目的地),这样不同的线程可以根据需求将日志输出到不同的文件或位置。 **Log4j2配置** 在Log4j2中,配置文件通常使用XML、JSON或YAML格式,可以灵活定义日志级别、...
1. **配置文件**:如`log4j2.xml`,这是Log4j2的配置中心,定义了日志记录的策略、级别、输出目标等。 2. **日志记录器(Logger)**:负责收集和处理日志事件。 3. **日志级别(Level)**:如`TRACE`, `DEBUG`, `...
在Log4j2 version 2.1这个版本中,引入了更多的优化和新特性,使其成为Java开发者进行日志管理的首选工具之一。 **主要组件** 1. **Logger**: 日志记录的核心组件,负责接收日志事件并将其传递给配置的Appender。 ...
标题中的“log4jdbc-log4j2配置简记”指的是在Java开发中使用log4jdbc-log4j2库来监控和记录SQL查询的过程。log4jdbc是一个开源项目,它允许开发者通过日志系统来追踪数据库操作,而log4j2是log4j的升级版,提供了更...
Appender 是 Log4j2 中的核心组件之一,负责将日志事件输出到不同的目的地: - **Console Appender**:输出到控制台。 - **File Appender**:将日志记录写入文件。 - **DB Appender**:记录到数据库。 - **SMTP ...
NULL 博文链接:https://wait7758521.iteye.com/blog/1933964
Log4j2设计为高度可扩展,允许开发者通过编写自定义插件来实现特定的日志需求,如自定义Appenders、Filters和Lookups。这使得Log4j2能够适应各种复杂的应用场景。 7. **与其他框架的集成**: Log4j2很容易与其他...
#### 四、log4j的核心组件 log4j的核心组件主要包括**Loggers(记录器)**、**Appenders(输出源)**和**Layouts(布局)**。 1. **Loggers (记录器)**:负责生成日志信息,并决定是否发送日志信息到Appenders。记录器...
在Log4j2版本2.1中,引入了更多性能优化和新特性,使其成为日志管理的首选工具之一。本Demo旨在展示如何在Web项目中集成和使用Log4j2。 **1. 安装与配置** 首先,你需要在你的Maven或Gradle项目中添加Log4j2的依赖...
**四、Log4j2的高级特性** 1. **异步日志记录**: Log4j2支持异步日志处理,通过使用LMAX Disruptor库,可以极大地提高日志性能。 2. **动态日志配置**: 可以在运行时通过JMX或API修改日志配置,无需重启应用程序。 ...