ch.qos.logback.core.Appender 接口
ch.qos.logback.core.AppenderBase
)
ch.qos.logback.core.UnsynchronizedAppenderBase
OutputStreamAppender 将日志事件附加到java.io.OutputStream中。这个类作为ConsoleAppender,FileAppender的父类,其中FileAppender又是
RollingFileAppender的父类。但一般来说,都不能通过实例化这个Appender。下面是OutputStream的类关系图
ConsoleAppender
Property Name | Type | Description |
---|---|---|
encoder | Encoder |
Determines the manner in which an event is written to the underlying OutputStreamAppender . Encoders are described in a dedicated chapter. |
target | String |
指定输出目标。可选值:System.out 或 System.err。默认值:System.out |
withJansi | boolean |
是否支持ANSI color codes(类似linux中的shell脚本的输出字符串颜色控制代码)。默认为false。如果设置为true。例如:
[31m 代表将前景色设置成红色。在windows中,需要提供"org.fusesource.jansi:jansi:1.9",而在linux,mac os x中默认支持。
在Eclipse IDE中,你可以尝试
ANSI in Eclipse Console 插件。
|
FileAppender
Property Name | Type | Description |
---|---|---|
append | boolean |
是否以追加方式输出。默认为true。 |
encoder | Encoder |
See OutputStreamAppender properties. |
file | String |
指定文件名。注意在windows当中,反斜杠 \ 需要转义,或直接使用 / 也可以。例如 c:/temp/test.logor 或 c:\\temp\\test.log 都可以。没有默认值,如果上层目录不存在,FileAppender会自动创建。 |
prudent | boolean |
是否工作在谨慎模式下。在谨慎模式下,FileAppender将会安全写入日志到指定文件,即时在不同的虚拟机jvm中有另一个相同的FileAppender实例。
默认值:fales
设置为true,意味着append会被自动设置成true
prudent依赖于文件排它锁。实验表明,使用文件锁,会增加3倍的日志写入消耗。比如说,当prudent模式为off,写入一条日志到文件只要10毫秒,但是prudent为真,则会接近30毫秒。
prudent 模式实际上是将I/O请求序列化,因此在I/O数量较大,比如说100次/s或更多的时候,带来的延迟也会显而易见,所以应该避免。在networked file system(远程文件系统)中,这种消耗将会更大,可能导致死锁。
|
RollingFileAppender
Property Name | Type | Description |
---|---|---|
file | String |
指定文件名。注意在windows当中,反斜杠 \ 需要转义,或直接使用 / 也可以。例如 c:/temp/test.logor 或 c:\\temp\\test.log 都可以。没有默认值,如果上层目录不存在,FileAppender会自动创建。 |
append | boolean |
是否以追加方式输出。默认为true。 |
encoder | Encoder |
See OutputStreamAppender properties. |
rollingPolicy | RollingPolicy |
当发生日志切换时,RollingFileAppender的切换行为。例如日志文件名的修改 |
triggeringPolicy | TriggeringPolicy |
决定什么时候发生日志切换,例如日期,日志文件大小到达一定值 |
prudent | boolean |
FixedWindowRollingPolicy
不支持prudent模式。
TimeBasedRollingPolicy 支持prudent模式,但是需要满足一下两条约束:
|
TimeBasedRollingPolicy 也许是最受欢迎的日志滚动策略。它的滚动策略是基于时间的,例如根据天数,月份。
Property Name | Type | Description |
---|---|---|
fileNamePattern | String |
这个必需的属性,决定了日志滚动时,归档日志的命名策略。它由文件名,以及一个%d转移符组成。%d{}花括号中需要包含符合SimpleDateFormat约定的时间格式,如果未指定,直接是%d,则默认相当于%d{yyyy-MM-dd}。
需要注意的是,在RollingPolicy节点的父节点appender节点中,
同样需要注意的是,在%d{}中,不管是“/”还是“\”都被认为是文件分隔符。
多个%d转移符的情况:
fileNamePaatern的值允许包含多个%d的情况,但是只有一个%d作为主要的日志滚动周期的参考值。其余非主要的%d需要包含一个"aux"的参数。
例如:
根据年月划分目录,再将相应月份按日期天数命名的归档日志存放在一起同一个月份文件夹当中。该属性值决定在每天0点的时候发生日志切换。
时区问题:
你可以将日期转换成相应时区的时间。
例如
aFolder/test.%d{yyyy-MM-dd-HH, UTC}.log //世界协调时间
aFolder/test.%d{yyyy-MM-dd-HH, GMT}.log //格林尼治时间
|
maxHistory | int | 可选参数,声明归档日志最大保留时间。如果你是基于月份的日志滚动,则当maxHisory为6时,说明会保留6个月的日志。大于6个月的就会被删除。日志所存在的目录也会被合适的删除掉。 |
totalSizeCap | int |
可选参数,声明归档日志的最大存储量。当超过这个值,最老的归档日志文件也会被删除。
|
cleanHistoryOnStart | boolean |
可选参数,默认为false。
如果设置为true,则当appender启动时,会删除所有归档日志文件。
|
fileNamePattern | Rollover schedule | Example |
---|---|---|
/wombat/foo.%d |
每天午夜滚动日志,未指定,默认为%d{yyyy-MM-dd}
|
file属性未设置的情况下:在2016年7月17日,日志会输出到/wombat/foo.2016-07-17日志文件中,在午夜24点,当前有效日志文件会被转换成/wombat/foo.2016-07-18
file属性设置为/wombat/foo.txt的情况下:在2016年7月17日,日志会输出到/wombat/foo.txt的日志文件中,在午夜24点,日志文件被归档,并重命名为/wombat/foo.2016-07-18, 当前有效日志文件重新创建,并命名为/wombat/foo.txt
|
/wombat/%d{yyyy/MM}/foo.txt | 每月一更 |
file属性未设置的情况下:在2016年7月,日志输出到到/wombat/2016/07/foo.txt。在7月31号午夜24点,日志重定向输出到/wombat/2016/08/foo.txt。
file属性设置为/wombat/foo.txt的情况下:当前有效日志文件为file指定值,在月末24点,归档日志,并重新创建file指定的文件,并将日志输出流重定向到这个新文件。
|
/wombat/foo.%d{yyyy-ww}.log | 每星期一更,需要注意,每星期第一天与区域设置有关 | 与上类似 |
/wombat/foo%d{yyyy-MM-dd_HH}.log | 每小时一更 | 与上类似 |
/wombat/foo%d{yyyy-MM-dd_HH-mm}.log | 每分钟一更 | 与上类似 |
/wombat/foo%d{yyyy-MM-dd_HH-mm, UTC}.log | 每分钟一更,并且采用UTC时间 | 与上类似,除了时间被格式化成UTC时间 |
/foo/%d{yyyy-MM,aux}/%d.log | 每日一更 | 包含两个%d,第一个包含aux说明是并非主要的滚动参数,主要是用来做文件夹分割。也就是讲每天的日志按月份划分存储在不同的路径下 |
fileNamePattern | Rollover schedule | Example |
---|---|---|
/wombat/foo.%d.gz |
每日一更,自动压缩并归档日志文件
|
file属性未设置的情况下:在2016年7月17日,日志输出到 /wombat/foo.2016-07-17,在午夜24点,日志文件会被压缩并重新命名为/wombat/foo.2016-07-17.gz。之后日志便重新定向到/wombat/foo.2016-07-18
file属性被设置成/wombat/foo.txt的情况下:当前有效日志文件名永远不变,在每日0点滚动日志,并压缩日志。
|
FixedWindowRollingPolicy
Property Name | Type | Description |
---|---|---|
minIndex | int |
这个参数指定窗口索引的最小值
|
maxIndex | int |
这个参数指定窗口索引的最大值
|
fileNamePattern | String |
这个参数与之前的fileNamePattern没什么差别,唯一需要注意的是必须包含%i标识符,这个标识符的作用是指明当前窗口索引的值。
例如将fileNamePattern设置成 "
MyLogFile%i
",minIndex为1,maxIndex为3,则会创建
MyLogFile1.log, MyLogFile2.log and MyLogFile3.log.这三个归档日志文件。
|
TriggeringPolicy 负责RollingFileAppender何时发生日志滚动
SizeBasedTriggeringPolicy 检测当前活动日志文件的大小,当到达一定容量,就开启日志滚动。
LoggingEventVO 继承ILoggingEvent接口。远程日志记录并非是侵入式的。在反序列化接收后,日志事件就可以好像在本地生成的日志一样处理了。多个SockerAppender可以向同一台日志服务器发送日志。SocketAppender并不需要关联一个Layout,因为它只是发送序列化的日志事件给远程日志服务器。SocketAppender的发送操作是基于TCP协议的。因此如果远程服务器是可到达的,则日志会被其处理,如果远程服务器宕机或不可到达,那么日志将会被丢弃。等到远程服务器复活,日志发送将会透明的重新开始。这种透明式的重连,是通过一个“连接“线程周期性的尝试连接远程服务器实现的。
Property Name | Type | Description |
---|---|---|
includeCallerData | boolean |
是否包含调用者的信息
如果为true,则以下日志输出的 ?:? 会替换成调用者的文件名跟行号,为false,则为问号。
2006-11-06 17:37:30,968 DEBUG [Thread-0] [?:?] chapters.appenders.socket.SocketClient2 - Hi
|
port | int |
端口号 |
reconnectionDelay | Duration |
重连延时,如果设置成“10 seconds”,就会在连接u武器失败后,等待10秒,再连接。默认值:“30 seconds”。如果设置成0,则关闭重连功能。 |
queueSize | int |
设置缓冲日志数,如果设置成0,日志发送是同步的,如果设置成大于0的值,会将日志放入队列,队列长度到达指定值,在统一发送。可以加大服务吞吐量。
|
eventDelayLimit | Duration |
设置日志超时丢弃时间。当设置“10 seconds”类似的值,如果日志队列已满,而服务器长时间来不及接收,当滞留时间超过10 seconds,日志就会被丢弃。
默认值:
100 milliseconds
|
remoteHost | String |
远程日志服务器的IP |
ssl | SSLConfiguration |
只在SSLSocketAppender包含该属性节点。提供SSL配置,详情见 Using SSL. |
Property Name | Type | Description |
---|---|---|
address | String |
指定appender监听那个本地网络接口地址,如果不指定,则监听所有网络接口 |
includeCallerData | boolean |
如果为true,caller data 会传送给远程主机。默认不传送
|
port | int |
监听那个端口
|
ssl | SSLConfiguration |
该属性只被SSLServerSocketAppender支持,提供SSL配置 |
SMTPAppender
可以将logging event存放在一个或多个固定大小的缓冲区中,然后在用户指定的event到来之时,将适当的大小的logging event以邮件方式发送给运维人员
。
Property Name | Type | Description |
---|---|---|
smtpHost | String |
SMTP server的地址,必需指定。如网易的SMTP服务器地址是: smtp.163.com |
smtpPort | int |
SMTP server的端口地址。默认值:25 |
to | String |
指定发送到那个邮箱,可设置多个 |
from | String |
指定发件人名称。如果设置成“Adam Smith <[email protected]> ”,则邮件发件人将会是“Adam Smith |
subject | String |
指定emial的标题,它需要满足PatternLayout中的格式要求。如果设置成“
Log: %logger - %msg ”,就案例来讲,则发送邮件时,标题为“
Log: com.foo.Bar - Hello World ”。
默认值:
"%logger{20} - %m".
|
discriminator | Discriminator |
通过Discriminator, SMTPAppender可以根据Discriminator的返回值,将到来的logging event分发到不同的缓冲区中。默认情况下,总是返回相同的值来达到使用一个缓冲区的目的。
|
evaluator | IEvaluator |
指定触发日志发送的条件。
通过
Logback提供了几个evaluators:
|
cyclicBufferTracker | CyclicBufferTracker |
指定一个cyclicBufferTracker跟踪cyclic buffer。它是基于discriminator的实现的。如果你不指定,默认会创建一个CyclicBufferTracker ,默认设置cyclic buffer大小为256。你也可以手动指定使用默认的CyclicBufferTracker,并且通过 |
username | String |
发送邮件账号,默认为null |
password | String |
发送邮件密码,默认为null |
STARTTLS | boolean |
如果设置为true,appender会尝试使用STARTTLS命令,如果服务端支持,则会将明文连接转换成加密连接。需要注意的是,与日志服务器连接一开始是未加密的。
默认值:false
|
SSL | boolean |
如果设置为true,appender将会使用SSL连接到日志服务器。
默认值:false
|
charsetEncoding | String |
指定邮件信息的编码格式
默认值:UTF-8
|
localhost | String |
如果smtpHost没有正确配置,比如说不是完整的地址。这时候就需要localhost这个属性提供服务器的完整路径(如同java中的完全限定名 ),详情参考com.sun.mail.smtp 中的mail.smtp.localhost属性 |
asynchronousSending | boolean |
这个属性决定email的发送是否是异步。
默认:true,异步发送
但是在某些情况下,需要以同步方式发送错误日志的邮件给管理人员,防止不能及时维护应用。
|
includeCallerData | boolean |
默认:false
指定是否包含callerData在日志中
|
sessionViaJNDI | boolean |
SMTPAppender依赖javax.mail.Session来发送邮件。默认情况下,sessionViaJNDI为false。javax.mail.Session实例的创建依赖于SMTPAppender本身的配置信息。如果设置为true,则Session的创建时通过JNDI获取引用。这样做的好处可以让你的代码复用更好,让配置更简洁。
需要注意的是,如果使用JNDI获取Session对象,需要保证移除mail.jar以及activation.jar这两个jar包
|
jndiLocation | String |
如果sessionViaJNDI设置为true,则jndiLocation指定JNDI的资源名,默认值为:"java:comp/env/mail/Session" |
DBAppender
可以将日志事件插入到3张数据表中。它们分别是logging_event,logging_event_property,logging_event_exception。这三张数据表必须在DBAppender工作之前存在。它们的sql脚本可以在
logback-classic/src/main/java/ch/qos/logback/classic/db/script
folder 这个目录下找到。这个脚本对大部分SQL数据库都是有效的,除了少部分,少数语法有差异需要调整。
RDBMS | tested version(s) | tested JDBC driver version(s) | supports getGeneratedKeys() method |
is a dialect provided by logback |
---|---|---|---|---|
DB2 | untested | untested | unknown | NO |
H2 | 1.2.132 | - | unknown | YES |
HSQL | 1.8.0.7 | - | NO | YES |
Microsoft SQL Server | 2005 | 2.0.1008.2 (sqljdbc.jar) | YES | YES |
MySQL | 5.0.22 | 5.0.8 (mysql-connector.jar) | YES | YES |
PostgreSQL | 8.x | 8.4-701.jdbc4 | NO | YES |
Oracle | 10g | 10.2.0.1 (ojdbc14.jar) | YES | YES |
SQLLite | 3.7.4 | - | unknown | YES |
Sybase SQLAnywhere | 10.0.1 | - | unknown | YES |
Field | Type | Description |
---|---|---|
timestamp | big int |
日志事件创建的时间 |
formatted_message | text |
格式化logging event的信息
The message that has been added to the logging event, after formatting with org.slf4j.impl.MessageFormatter , in case objects were passed along with the message.
|
logger_name | varchar |
logger的name |
level_string | varchar |
日志事件等级 |
reference_flag | smallint |
这个属性被logback用来判断logging event是否包含exception 或 MDC property
这个值由
ch.qos.logback.classic.db.DBHelper计算得出。
当logging event包含MDC 或者上下文属性时,为1;当包含异常为2;前两个都有则为3。
|
caller_filename | varchar |
日志事件调用者的文件名 |
caller_class | varchar |
日志事件调用者的类名 |
caller_method | varchar |
日志事件调用者的函数 |
caller_line | char |
触发日志事件的代码所在行数 |
event_id | int |
日志事件在数据库表中的id。主键 |
Field | Type | Description |
---|---|---|
event_id | int |
日志事件在数据库表中的id。主键 |
mapped_key | varchar |
MDC property的key |
mapped_value | text |
MDC property的value |
Field | Type | Description |
---|---|---|
event_id | int |
日志事件在数据库表中的id。主键 |
i | smallint |
The index of the line in the full stack trace. |
trace_line | varchar |
The corresponding line |
The logging_event table:
The logging_event_exception table:
The logging_event_property table:
SyslogAppender 是一个非常简单的协议:一个syslog sender发送一个small message给syslog receiver。这个receiver通常被叫做syslog守护进程或者syslog server。logback可以发送消息给远程的receiver
Property Name | Type | Description |
---|---|---|
syslogHost | String |
syslog server的主机名 |
port | String |
server的端口,默认值:514 |
facility | String |
facility属性用来识别message的来源
必须被设定为
KERN, USER, MAIL, DAEMON, AUTH, SYSLOG, LPR, NEWS, UUCP, CRON, AUTHPRIV, FTP, NTP, AUDIT, ALERT, CLOCK, LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7. 这些字符串的其中一个。
|
suffixPattern | String |
指定发送的消息格式,默认值:
[%thread] %logger %msg 。参照的语法PatternLayout
|
stackTracePattern | String |
The
stackTracePattern property allows the customization of the string appearing just before each stack trace line. The default value for this property is "\t", i.e. the tab character. Any value accepted by
PatternLayout is a valid value for
stackTracePattern.
|
throwableExcluded | boolean |
Setting throwableExcluded to true will cause stack trace data associated with a Throwable to be omitted. By default, throwableExcluded is set to false so that stack trace data is sent to the syslog server. |
Property Name | Type | Description |
---|---|---|
timeout | Duration |
设置内置appender未有日志输出的过期时间。默认值:30 minutes |
maxAppenderCount | integer |
设置最多可以创建多少个内置的appender,默认值:Integer.MAX_VALUE |
Property Name | Type | Description |
---|---|---|
queueSize | int |
设置blocking queue的最大容量,默认是256条events |
discardingThreshold | int |
默认,当blocking queue被占用80%以上,AsyncAppender就会丢弃level为 TRACE,DEBUG,INFO的日志事件,如果要保留所有等级的日志,需要设置成0 |
includeCallerData | boolean |
提取CallerData代价比较昂贵,为了提高性能,caller data默认不提供。只有一些获取代价较低的数据,如线程名称,MDC值才会被保留。如果设置为true,就会包含caller data |
maxFlushTime | int |
设置最大等待刷新事件,单位为miliseconds(毫秒)。当LoggerContext关闭的时候,AsyncAppender会在这个时间内等待工作线程完成events的flush工作,超时未处理的events将会被抛弃。 |
neverBlock | boolean |
默认为false,如果队列被填满,为了处理所有日志,就会阻塞的应用。如果为true,为了不阻塞你的应用,也会选择抛弃一些message。 |
Field | Type | Description |
---|---|---|
timestamp | big int |
The timestamp that was valid at the access event's creation. |
requestURI | varchar |
The URI that was requested. |
requestURL | varchar |
The URL that was requested. This is a string composed of the request method, the request URI and the request protocol. |
remoteHost | varchar |
The name of the remote host. |
remoteUser | varchar |
The name of the remote user. |
remoteAddr | varchar |
The remote IP address. |
protocol | varchar |
The request protocol, like HTTP or HTTPS. |
method | varchar |
The request method, usually GET or POST. |
serverName | varchar |
The name of the server that issued the request. |
event_id | int |
The database id of the access event. |
Field | Type | Description |
---|---|---|
event_id | int |
The database id of the corresponding access event. |
header_key | varchar |
The header name, for example User-Agent. |
header_value | varchar |
The header value, for example Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) Gecko/20061010 Firefox/2.0 |
Property Name | Type | Description |
---|---|---|
insertHeaders | boolean |
Tells the DBAppender to populate the database with the header information of all incoming requests. |