Appender输出目的地,官网给出的定义是:“Appenders are responsible for delivering LogEvents to their destination.”。

Log4j2为使用者提供了13种非常实用的Appenders,使用者可用方便的调用这13种Appender来控制日志的输出。

下面将按照如下顺序依次介绍每个Appender的作用及重要参数。

1、FileAppender         普通地输出到本地文件

2、FlumeAppender     将几个不同源的日志汇集、集中到一处。

3、JMSQueueAppender & 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 & 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。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秒。

【完整的参数介绍和官方配置示例】

Log4j2配置之Appenders相关推荐

  1. Spring Boot之Log4j2配置(总结)

    Log4j2配置步骤 前言 spring boot支持的日志框架有,logback,Log4j2,Log4j和Java Util  Logging,默认使用的是logback日志框架,一直在使用log ...

  2. Log4j2配置详解

    一.背景 最近由于项目的需要,需要将日志全部迁移成 log4j2 版本,之前对于项目日志的配置总是似懂非懂,最近详细整理了下知识点,本文就作为一个记录来详细记录一下 log4j2 配置的相关知识点. ...

  3. log4j2配置日志打印时区

    在项目开发遇到一个关于系统时区的问题,因为服务器使用的国外的服务器,时区统一设置不方便(反正是云架构师说的),但是对于系统的业务又需要使用中国时区,所以日志,还是后端代码都要使用中国时区. 后端代码有 ...

  4. 【解决方案】log4j2配置日志打印时区

    日志设置时区: <!--log4j2 配置timezone --> <property name="LOG_PATTERN" value="%date{ ...

  5. log4j2配置实例[按小时记录日志文件]

    log4j2.xml文件配置实例:<?xml version="1.0" encoding="UTF-8"?> <configuration ...

  6. springboot4.1.1的log4j2配置

    一.默认情况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台: 日志输出内容元素具体如下: 时间日期:精确到毫秒 日志级别:ERROR, WARN, INFO, D ...

  7. slf4j + log4j2配置日志引擎

    maven包依赖引用 <dependency><groupId>org.apache.logging.log4j</groupId><artifactId&g ...

  8. log4j2 配置详解及使用范例

    最近项目需求需要将log4j1.2 升级到log4j2,摸索了好久,得出一点经验给大家分享. 1.log4j2 官网下载最新jar包(目前log2j2都是beta版) 导入入log4j-api-2.0 ...

  9. log4j2配置详情

    <?xml version="1.0" encoding="UTF-8"?> /app_data/logs/my_app_log UTF-8 [%d ...

最新文章

  1. JVM内存结构与GC
  2. java数组扩容arraylist,ArrayList--扩容机制
  3. 蓝桥杯 算法训练试题 数据交换 Java
  4. 微信小程序——真机调试方法(vConsole)
  5. centos5.4 64位下安装mysql5.5.14
  6. Python小练习2:pandas.Dataframe使用方法示例demo
  7. 蔬菜大棚成本_蔬菜大棚建设标准和成本
  8. 数据存储-传输-分析
  9. php多条件检索怎么写,sql查询同时满足三个条件 php查询数据库,同时满足三个条件的sql怎么写?...
  10. 【三月专题】Dp专练
  11. 怎么做301永久重定向
  12. oracle+11g+32位数据库能导入到64位么,Oracle 11G数据库导出问题解决
  13. Spring的 @ExceptionHandler注解无效问题
  14. python如何高效办公_用 Python 高效办公|一次写好100个word通知,还有谁?
  15. php评论表情包怎么引入,纯代码实现WordPress添加评论表情(心情)的教程
  16. Web前端工程师学习路线
  17. 【老九】【C语言】CodeBlocks安装文档
  18. WARN Error while fetching metadata with correlation id 13 : {test=LEADER_NOT_AVAILABLE}
  19. iOS - 微信分享无法显示好友列表
  20. 计算机高中期末总结作文,期末考试总结作文(精选5篇)

热门文章

  1. java 字符串掐头去尾_java中常见的类
  2. html如何制作电子邮件地址怎么写,如何制作html电子邮件?
  3. 推荐一些好的英语python书籍知识点
  4. 百万前端之js通过链接生成二维码可以保存下载复制
  5. dell10代cpu装linux,戴尔10代CPU完美装Win7|DELL 10代CPU装Win7教程
  6. R语言程序包下载地址:CRAN Packages
  7. Typora下载安装及使用方法
  8. Word Averaging模型做文本分类 稳定效果好模型简单
  9. 聊下Android的专利许可和商标
  10. 郭建兵:四个方面大力度促进云计算发展