项目中一直有使用日志,以前都是面向CV编程,今天整理了下常用的两种输出方式(ConsoleAppendert和RollingRandomAccessAppender)和经常搞混的PatternLayout格式,还有Logger节点里的additivity属性,留下个笔记。
Demo放在GitHub上,点击此处下载
ConsoleAppender点击查看示例
<Console name="console1" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss} %n"></PatternLayout>
</Console>
RollingRandomAccessAppender点击查看示例
<RollingRandomAccessFile name="file1" fileName="${fileName}/app.log"
filePattern="${fileName}/$${date:yyyy-MM}/app-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss} [%t] %-5level %l %logger{36} %msg%n"></PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1"/>
<SizeBasedTriggeringPolicy size="10 MB"/>
</Policies>
<DefaultRolloverStrategy max="20"/>
</RollingRandomAccessFile>
PatternLayout
%d{yyyy-MM-dd 'at' HH:mm:ss}
日期格式,跟SimpleDateFormat 的pattern类似
yyyy 年
MM 月
dd 日
HH 时
mm 分
ss 秒
%t 线程名
%-5level 日志的级别
%l 输出日志发生的位置,对应的类和方法 (另:%L 只输出对应的行)
%logger 输出日志记录的名称,一般用类全名 {n}里面表示输出名称只个节点,正负数均可,只是负数是从左边开始截掉n个,正数是从右边开始截取n个
%msg 输出日志的内容
%n 换行
additivity
如果additivity为真,则会向父级包查找,而不是直接查到Root节点,
如:com.test.controller.TestController2 会找到com.test,再找到Root
所以如果访问TestController2中的接口,会记录三条日志,demo里面有详细说明