log4j2常用Appender介绍
来源:互联网 发布:linux cp命令 目录 编辑:程序博客网 时间:2024/06/05 21:15
前言
Appender按网络释义,有“输出目的地”之意。官网给出的定义是:“Appenders are responsible for delivering LogEvents to their destination.”。(题外话:Appender和LogEvent都是log4j2的重要组件)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、RollingFileAppender
RollingFileAppender是一个非常有意思的输出器。它将log信息写入一个文件后,会判断是否满足封存文件的要求,若满足,则除非封存文件的动作。RollingFileAppender需要TriggeringPolicy来指定触发封存的条件,另外还需要RolloverStrategy来告诉输出器如何封存文件。
Log4j2中已提供的TriggeringPolicy有如下四种,其中③和④比较常用:
① CompositeTriggeringPolicy
复合型触发策略。即将多个触发条件组合到一起,这些触发条件是或的关系,只要其中一个条件满足,则触发封存动作。
② OnStartupTriggeringPolicy
这一触发策略不需要参数设置,它会自行判断log文件的创建时间和JVM的启动时间。若log文件的创建时间早于JVM的启动时间,则将原来的log文件封存,然后创建一个新的空白log文件。
③ SizeBasedTriggering Policy
这一触发策略基于对log文件大小的判断。当log文件大于设定的阈值时,将触发封存动作。可设定的log文件大小的单位有bytes、KB、MB或GB。
④ TimeBasedTriggering 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的用法示例】
4、AsynchAppender
将一个LogEvent异步地写入多个不同输出地。在AsynchAppender中有一个参数,名为“appender-ref”,用来指定要发送到的appender的名称。AsynchAppender维护了一个队列,队列中存放了需要异步发送的LogEvent,队列中LogEvent的个数可以通过“bufferSize”参数来指定。另外,还有一个“blocking”参数来指定是否对AsynchAppender的LogEvent队列上锁,如果blocking=true,那么在队列满员的情况下,新到达的LogEvent将等待,直到有空位。若blocking=false,那么在队列满员的情况下,将把新到的LogEvent转到error appender。对这个Appender的详细分析,可参考:log4j2之AsynchAppender
【完整的参数介绍和官方配置示例】
5、ConsoleAppender
将LogEvent输出到命令行。有两个比较有意思的参数,一个是layout,用来指定输出字串的格式(format);另一个是target,用来指定输出的是 "SYSTEM_OUT" 还是 "SYSTEM_ERR",默认情况下是"SYSTEM_ERR"。
【完整的参数介绍和官方配置示例】
未完待续。。。。。。
参考资料
https://my.oschina.net/kkrgwbj/blog/734530
Log4j2 Appenders 官网介绍
Apache Flume
- log4j2常用Appender介绍
- Log4j2 自定义 Appender
- Log4j2自定义Appender注意事项
- Log4j2的flume appender配置
- log4j2配置详解及自定义Appender
- Log4j2、Log4j、Logback自定义Appender实现
- Log4j2官方文档翻译、学习笔记之二——Appender的分类及常用类型示例
- log4j2 介绍
- Log4j自定义Appender介绍
- Log4j自定义Appender介绍
- Log4j自定义Appender介绍
- Log4j自定义Appender介绍
- Log4j自定义Appender介绍
- Log4j自定义Appender介绍
- Log4j自定义Appender介绍
- log4j2自定义Appender(输出到文件/RPC服务中)
- log4j2自定义Appender(输出到文件/RPC服务中)
- log4j2入门(2)-日志多appender输出
- 欢迎使用CSDN-markdown编辑器
- python 基本语句
- 总结:Lucas定理
- 解决Mac下ant错误:找不到或无法加载主类 org.apache.tools.ant.launch.Launcher
- IDEA使用--字体、编码和基本设置
- log4j2常用Appender介绍
- Connected Component in Undirected Graph
- airticket 插件开发
- CSS学习01-概述
- Effective Java
- (原创)选择排序与快速排序及D&C算法的延伸
- STL源码剖析笔记(空间适配器)
- Apache Shiro的使用
- 第三方登录QQ完整版,授权登录