Log4j2官方文档翻译、学习笔记之二——Appender的分类及常用类型示例
来源:互联网 发布:耐驰热分析软件下载 编辑:程序博客网 时间:2024/05/30 23:03
Appenders是什么
官方文档说“Appenders are responsible for delivering LogEvents to their destination.”也就是说,Appenders负责将日志事件投递到它们的目的地。这个目的地可以是控制台,文件,数据库,甚至是邮件。Appender通常会将日志信息的排版委托给layout(layout将在下一篇博客详细讲解)。
Appender分类
常用Appender讲解
ConsoleAppender
ConsoleAppender将日志信息输出到System.out。它的所有属性如下:
- filter:设置过滤器
- layout:设置输出样式
- follow:Identifies whether the appender honors reassignments of System.out or System.err via System.setOut or System.setErr made after configuration.
- direct:是否绕过java.lang.System.out/.err,直接写入java.io.FileDescriptor。这会带来10倍的性能提升。
- name:Appender的名字
- ignoreException:默认true。
- target:输出方法,“SYSTEM_OUT”或者“SYSTEM_ERR”。默认“SYSTEM_OUT”
一个典型的控制台配置实例:
<?xml version="1.0" encoding="UTF-8"?><Configuration status="warn" name="MyApp" packages=""> <Appenders> <Console name="STDOUT" target="SYSTEM_OUT"> <PatternLayout pattern="%m%n"/> </Console> </Appenders> <Loggers> <Root level="error"> <AppenderRef ref="STDOUT"/> </Root> </Loggers></Configuration>
RandomAccessFileAppender
RandomAccessFIleAppender和标准的FileAppender很相似,除了将BufferdOutputStream替换为了ByteBuffer+RandomAccessFile。因为使用了缓存,它的性能比FileAppender高20%~200%.它的属性如下:
- append:boolean类型,默认为true。当为true时,它会将日志事件记录添加到文件末尾。若为false,则会清除之前的记录,然后写入。
- fileName:将要写入的文件名。如果这个文件或者其父目录不存在,那么他们将会被创建。
- filters:过滤器
- immediateFlush:boolean。当为true(默认值)时,每一次写入都会被刷新到文件。这能保证记录会被写入硬盘,但是会影响性能。 每次写入过后都立即刷新仅在日志记录需要同步的时候有用。异步的loggers和appenders会自动地在每个批处理后刷新,即使该属性被设置为false。这既保证了记录的写入,同时也保证了效率。
- bufferSize:缓存空间大小,默认为256M。
- layout:设置输出样式
- name:该Appender的名字
- ignoreExceptions:同上
使用示例:
<Configuration status="warn" name="MyApp"> <Appenders> <RandomAccessFile name="RAF" fileName="logs/app.log"> <PatternLayout> <Pattern>%d %p %c{1.} [%t] %m%n</Pattern> </PatternLayout> </RandomAccessFile> </Appenders> <Loggers> <Root level="error"> <AppenderRef ref="RAF"/> </Root> </Loggers> </Configuration>
RollingFileAppender
RollingFileAppender是一种OutputStreamAppender。它除了将日志输出到文件外,还会根据TriggeringPolicy和RolloverPolicy生成新的日志文件。
一个RollingFileAppender需要两个策略的支持,分别是TriggeringPolicy和RolloverPolicy。TriggeringPolicy定义何时应该生成新的日志文件而RolloverPolicy则决定如何生成新的日志文件。RollingFileAppender不支持文件锁。
RollingFileAppender的详细信息可以参照博客http://blog.csdn.net/u013066244/article/details/72461105。这位博主翻译了官方文档的这一节,写得很好,我就不重复造轮子了。
贴一个使用示例:
<?xml version="1.0" encoding="UTF-8"?><configuration status="error"> <!--先定义所有的appender--> <appenders> <!--这个输出控制台的配置--> <Console name="Console" target="SYSTEM_OUT"> <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--> <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/> <!--这个都知道是输出日志的格式--> <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/> </Console> <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用--> <!-- <File name="log" fileName="log/test.log" append="false"> <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/> </File>--> <!--这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档--> <RollingFile name="RollingFile" fileName="logs/app.log" filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.zip"> <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/> <!--为了方便测试,这里设置为尽可能小--> <SizeBasedTriggeringPolicy size="1k"/> </RollingFile> </appenders> <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效--> <loggers> <!--建立一个默认的root的logger--> <root level="trace"> <appender-ref ref="RollingFile"/> <appender-ref ref="Console"/> </root> </loggers></configuration>
更加完整的测试示例基于SpringBoot和Maven构建,包含控制台和文件输出,采用了上面示例中的PatternLayout格式化输出,已经通过测试,并且上传至Github,欢迎克隆学习!Github开源地址:https://github.com/Dodozhou/log4j2Learning
下一篇:Log4j2官方文档翻译、学习笔记之三——Layouts的分类及常用类型示例
- Log4j2官方文档翻译、学习笔记之二——Appender的分类及常用类型示例
- Log4j2官方文档翻译、学习笔记之三——Layouts的分类及常用类型示例
- Log4j2官方文档翻译、学习笔记之一——log4j2基础配置及功能概述
- log4j2.x官方文档翻译(二)
- Log4J学习【二十一】常用的Appender之FileAppender
- Log4J学习【二十二】常用的Appender之DailyRollingFileAppender
- Log4J学习【二十三】常用的Appender之SocketAppender
- log4j2常用Appender介绍
- log4j2.x官方文档翻译(一)
- Android Geofence的学习(二)继续翻译官方文档
- Flume官方文档翻译之(二)
- Jinja2学习笔记暨官方文档的翻译
- Log4J学习【二十五】常用的Appender的使用二
- Swift 集合类型(Collection Type) 之 数组(array)(官方文档翻译及总结)
- Swift 集合类型(Collection Type) 之 set(官方文档翻译及总结)
- Swift 集合类型(Collection Type) 之 字典(dictionary)(官方文档翻译及总结)
- Nashorn jdk8新增的ScriptEngine官方文档翻译及代码示例
- Log4J学习【二十四】常用的Appender的使用一
- java 常用命令
- vs2017+opencv3.2.0+pylon5.0.10
- java-用两个栈实现一个队列
- vue动画
- MakeFile介绍
- Log4j2官方文档翻译、学习笔记之二——Appender的分类及常用类型示例
- BZOJ3450 Tyvj1952 Easy
- Servlet页面访问量查询
- 单播,多播,广播
- 左旋字符串的三种算法
- 将整数字符串转成整数值 Python版
- 计算边长为abc三角形的面积
- C#中 委托与事件
- Java 对象与字节数组相互转换