Log4j2之Appenders

前言

  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。

【】

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型,指定两次封存动作之间的时间间隔。

有时我们选择改变,并非经过深思熟虑,而更像是听见了天地间冥冥中的呼唤,

Log4j2之Appenders

相关文章:

你感兴趣的文章:

标签云: