logback 日志总结

来源:互联网 发布:淘宝美工素材网站 编辑:程序博客网 时间:2024/06/05 03:19

文章大部分内容出处:http://aub.iteye.com/blog/1103685,主要是自己做个总结方便记忆。

 logback  3个首要组件:记录器(loggers)、输出源(Appenders)、布局器(Layouts)

日志配置

    根节点<configuration>
              scan:                 true :配置文件改变时会被重新加载。
              scanPeriod:       检测配置文件是否被修改,默认毫秒,scan为true时默认启动,间隔1分钟。
              debug:              true时将打印logback内部日志信息,默认false。

    上下文名称<contextName> 
              默认为"default",用于区分不用应用程序的记录。设置后不能修改。

     设置变量<property>
               带有两个属性,name(变量名)和value(值),可以用"$()"来引用变量。

      获取时间戳字符串 <timestamp>
                key:timestamp的名字,datePattern:设置时间转换字符串格式,遵循java.txt.SimpleDateFormat的格式。
    
       <loger>
                loger可包含多个<appender-ref>代表这个appender将会添加入这个loger。
                name:       指定受此loger约束的某个包或具体一个类。
                level:         设置打印级别,未设置则继承上级,TRACE,DEBUG,INFO,WARN,ERROR,ALL,OFF (不区分大小写),还有INHERITED或者NULL,代表强制执行上级级别。
                additivty:   是否向上级传递打印消息,默认true。

        <root>
                实际上就是是根root的loger元素,只有一个level属性,设置打印级别,默认DEBUG,同理拥有<appender-ref>。
       
        <appender>
                <configuration>的子节点,负责写日志的组件,属性有name:指定appender的名称,class:指定权限定名。
                ConsoleAppender把日志添加到控制台,节点:
                        <encoder>: 对日志进行格式化
                        <target>    : System.out或者System.err,默认out。
                FileAppender 把日志添加到文件中,节点:
                        <file> :写入文件名,可以是相对或决定路径,上级目录不存在会自动创建。
                        <append> : true 日志以追加的形势存储;false 日志以清空显存文件存储。
                        <encoder> : 格式化输出
                        <prudent> : true,日志会被安全的写入,效率低,默认false。
                RollingFileAppend 滚动记录文件,满足条件后会更换记录的文件,节点:
                        <file>同上
                        <append>同上
                        <encoder>同上
                        <rollingPolicy>滚动时,决定行为,包括文件移动和重命名。
                        <triggeringPolicy>何时激活滚动。
                        <prudent> true 不支持FixedWindowRollingPolicy,支持TimeBasedRollingPolicy,会有两个限制,不支持也不允许文件压缩;不能设置file属性,必须留空。
        
                rollingPolicy:
                         TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动。有以下子节点:
            <fileNamePattern>:
            必要节点,包含文件名及“%d”转换符, “%d”可以包含一个java.text.SimpleDateFormat指定的时间格式,如:%d{yyyy-MM}。如果直接使用 %d,默认格式是 yyyy-MM-dd。RollingFileAppender 的file字节点可有可无,通过设置file,可以为活动文件和归档文件指定不同位置,当前日志总是记录到file指定的文件(活动文件),活动文件的名字不会               改变;如果没设置file,活动文件的名字会根据fileNamePattern 的值,每隔一段时间改变一次。“/”或者“\”会被当做目录分隔符。
 
<maxHistory>:
            可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件。假设设置每个月滚动,且<maxHistory>是6,则只保存最近6个月的文件,删除之前的旧文件。注意,删除旧                文件是,那些为了归档而创建的目录也会被删除。
 
 
FixedWindowRollingPolicy: 根据固定窗口算法重命名文件的滚动策略。有以下子节点:
        <minIndex>:窗口索引最小值
        <maxIndex>:窗口索引最大值,当用户指定的窗口过大时,会自动将窗口设置为12。
        <fileNamePattern >:
        必须包含“%i”例如,假设最小值和最大值分别为1和2,命名模式为 mylog%i.log,会产生归档文件mylog1.log和mylog2.log。还可以指定文件压缩选项,例如,mylog%i.log.gz 或者 没有        log%i.log.zip
 
    triggeringPolicy:
 
SizeBasedTriggeringPolicy: 查看当前活动文件的大小,如果超过指定大小会告知RollingFileAppender 触发当前活动文件滚动。只有一个节点:
                         <maxFileSize>:这是活动文件的大小,默认值是10MB。

       <filter>
            过滤器,过滤器会根据你设定的返回枚举对日志进行不同的处理,添加入<appender>的过滤器会按照配置顺序执行。
                DENY:        抛弃该日志,不再处理。
                NEUTRAL :  由列表里的下一个过滤器处理。
                ACCEPT :      处理该日志,不再过其他过滤器。
               
            LevelFilter  :  级别过滤器,根据日志级别进行过滤,子节点:
                <level>:                设置过滤级别。
                <onMatch>:        用于配置符合过滤条件的操作。
                <onMismatch>: 配置不符合过滤条件的操作。

           ThresholdFilter :   临界值过滤器,子节点:
                <level>:                高于该级别返回NEUTRAL,低的直接拒接。

           EvaluatorFilter  :    求值过滤器,鉴别是否符合指定要求。子节点:
                <onMatch>:        用于配置符合过滤条件的操作。
                <onMismatch>: 配置不符合过滤条件的操作。
                <evaluator> : 鉴别器,常用的是JaninoEventEvaluato,默认鉴别器,以布尔值表达式做求值条件,
                    <matcher> 匹配器,
                    <expression>配置求值条件
    
Name
Type
Description
event
LoggingEvent
与记录请求相关联的原始记录事件,下面所有变量都来自event,例如,event.getMessage()返回下面"message"相同的字符串
message
String
日志的原始消息,例如,设有logger mylogger,"name"的值是"AUB",对于 mylogger.info("Hello {}",name); "Hello {}"就是原始消息。
formatedMessage
String
日志被各式话的消息,例如,设有logger mylogger,"name"的值是"AUB",对于 mylogger.info("Hello {}",name); "Hello Aub"就是格式化后的消息。
logger
String
logger 名。
loggerContext
LoggerContextVO
日志所属的logger上下文。
level
int
级别对应的整数值,所以 level > INFO 是正确的表达式。
timeStamp
long
创建日志的时间戳。
marker
Marker
与日志请求相关联的Marker对象,注意“Marker”有可能为null,所以你要确保它不能是null。
mdc
Map
包含创建日志期间的MDC所有值得map。访问方法是:mdc.get("myKey") 。mdc.get()返回的是Object不是String,要想调用String的方法就要强转,例如,
((String) mdc.get("k")).contains("val") .MDC可能为null,调用时注意。
throwable
java.lang.Throwable
如果没有异常与日志关联"throwable" 变量为 null. 不幸的是, "throwable" 不能被序列化。在远程系统上永远为null,对于与位置无关的表达式请使用下面的变量throwableProxy
throwableProxy
IThrowableProxy
与日志事件关联的异常代理。如果没有异常与日志事件关联,则变量"throwableProxy" 为 null. 当异常被关联到日志事件时,"throwableProxy" 在远程系统上不会为null



<encoder>
负责两件事,一是把日志信息转换成字节数组,二是把字节数组写入到输出流。
目前PatternLayoutEncoder 是唯一有用的且默认的encoder ,有一个<pattern>节点,用来设置日志的输入格式。使用“%”加“转换符”方式,如果要输出“%”,则必须用“\”对“\%”进行转义。
例如:
  1. <encoder>   
  2.    <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>   
  3. </encoder  
 
<pattern>里面的转换符说明:
 
转换符
作用
c {length } 
lo {length } 
logger {length } 
输出日志的logger名,可有一个整形参数,功能是缩短logger名,设置为0表示只输入logger最右边点符号之后的字符串。
Conversion specifier
Logger name
Result
%logger
mainPackage.sub.sample.Bar
mainPackage.sub.sample.Bar
%logger{0}
mainPackage.sub.sample.Bar
Bar
%logger{5}
mainPackage.sub.sample.Bar
m.s.s.Bar
%logger{10}
mainPackage.sub.sample.Bar
m.s.s.Bar
%logger{15}
mainPackage.sub.sample.Bar
m.s.sample.Bar
%logger{16}
mainPackage.sub.sample.Bar
m.sub.sample.Bar
%logger{26}
mainPackage.sub.sample.Bar
mainPackage.sub.sample.Bar
 
C {length } 
class {length } 
输出执行记录请求的调用者的全限定名。参数与上面的一样。尽量避免使用,除非执行速度不造成任何问题。
contextName 
cn 
输出上下文名称。
d {pattern } 
date {pattern } 
输出日志的打印日志,模式语法与java.text.SimpleDateFormat 兼容。
Conversion Pattern
Result
%d
2006-10-20 14:06:49,812
%date
2006-10-20 14:06:49,812
%date{ISO8601}
2006-10-20 14:06:49,812
%date{HH:mm:ss.SSS}
14:06:49.812
%date{dd MMM yyyy ;HH:mm:ss.SSS}
20 oct. 2006;14:06:49.812

F / file
输出执行记录请求的java源文件名。尽量避免使用,除非执行速度不造成任何问题。
caller{depth}caller{depth, evaluator-1, ... evaluator-n}
输出生成日志的调用者的位置信息,整数选项表示输出信息深度。
例如, %caller{2}   输出为:
0 [main] DEBUG - logging statement
Caller+0 at mainPackage.sub.sample.Bar.sampleMethodName(Bar.java:22)
Caller+1 at mainPackage.sub.sample.Bar.createLoggingRequest(Bar.java:17)
例如, %caller{3}   输出为:
16 [main] DEBUG - logging statement
Caller+0 at mainPackage.sub.sample.Bar.sampleMethodName(Bar.java:22)
Caller+1 at mainPackage.sub.sample.Bar.createLoggingRequest(Bar.java:17)
Caller+2 at mainPackage.ConfigTester.main(ConfigTester.java:38)
L / line
输出执行日志请求的行号。尽量避免使用,除非执行速度不造成任何问题。
m / msg / message
输出应用程序提供的信息。
M / method
输出执行日志请求的方法名。尽量避免使用,除非执行速度不造成任何问题。
n
输出平台先关的分行符“\n”或者“\r\n”。
p / le / level
输出日志级别。
r / relative
输出从程序启动到创建日志记录的时间,单位是毫秒
t / thread
输出产生日志的线程名。
replace(p ){r, t}
p 为日志内容,r 是正则表达式,将p 中符合r 的内容替换为t 。
例如, "%replace(%msg){'\s', ''}"
 
 
格式修饰符,与转换符共同使用:
可选的格式修饰符位于“%”和转换符之间。
第一个可选修饰符是左对齐 标志,符号是减号“-”;接着是可选的最小宽度 修饰符,用十进制数表示。如果字符小于最小宽度,则左填充或右填充,默认是左填充(即右对齐),填充符为空格。如果字符大于最小宽度,字符永远不会被截断。最大宽度 修饰符,符号是点号"."后面加十进制数。如果字符大于最大宽度,则从前面截断。点符号“.”后面加减号“-”在加数字,表示从尾部截断。
 
 
例如:%-4relative 表示,将输出从程序启动到创建日志记录的时间 进行左对齐 且最小宽度为4。

log4j pattern设置
参数
说明
例子
%c
列出logger名字空间的全称,如果加上{<层数>}表示列出从最内层算起的指定层数的名字空间
log4j配置文件参数举例
输出显示媒介
假设当前logger名字空间是"a.b.c"
%c
a.b.c
%c{2}
b.c
%20c
(若名字空间长度小于20,则左边用空格填充)
%-20c
(若名字空间长度小于20,则右边用空格填充)
%.30c
(若名字空间长度超过30,截去多余字符)
%20.30c
(若名字空间长度小于20,则左边用空格填充;若名字空间长度超过30,截去多余字符)
%-20.30c
(若名字空间长度小于20,则右边用空格填充;若名字空间长度超过30,截去多余字符)
%C
列出调用logger的类的全名(包含包路径)
假设当前类是"org.apache.xyz.SomeClass"
%C
org.apache.xyz.SomeClass
%C{1}
SomeClass
%d
显示日志记录时间,{<日期格式>}使用ISO8601定义的日期格式
%d{yyyy/MM/dd HH:mm:ss,SSS}
2005/10/12 22:23:30,117
%d{ABSOLUTE}
22:23:30,117
%d{DATE}
12 Oct 2005 22:23:30,117
%d{ISO8601}
2005-10-12 22:23:30,117
%F
显示调用logger的源文件名
%F
MyClass.java
%l
输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数
%l
MyClass.main(MyClass.java:129)
%L
显示调用logger的代码行
%L
129
%m
显示输出消息
%m
This is a message for debug.
%M
显示调用logger的方法名
%M
main
%n
当前平台下的换行符
%n
Windows平台下表示rn
UNIX平台下表示n
%p
显示该条日志的优先级
%p
INFO
%r
显示从程序启动时到记录该条日志时已经经过的毫秒数
%r
1215
%t
输出产生该日志事件的线程名
%t
MyClass
%x
按NDC(Nested Diagnostic Context,线程堆栈)顺序输出日志
假设某程序调用顺序是MyApp调用com.foo.Bar
%c %x - %m%n
MyApp - Call com.foo.Bar.
com.foo.Bar - Log in Bar
MyApp - Return to MyApp.
%X
按MDC(Mapped Diagnostic Context,线程映射表)输出日志。通常用于多个客户端连接同一台服务器,方便服务器区分是那个客户端访问留下来的日志。
%X{5}
(记录代号为5的客户端的日志)
%%
显示一个百分号
%%
%