使用前提
Logback-classic 依赖 slf4j-api.jar 和 logback-core.jar
Logback选择配置:
- 尝试在 classpath 下查找文件 logback-test.xml;
- 如果文件不存在,则查找文件 logback.xml;
- 如果两个文件都不存在,logback 用 BasicConfigurator 自动对自己进行配置,这会导致记录输出到控制台。
-------------------------------------------------------------------------------------------------------------------------------------
Level(日志级别)
记录请求级别为 p,其 logger 的有效级别为 q,只有则当 p>=q时,该请求才会被执行。
TRACE < DEBUG < INFO < WARN < ERROR
-------------------------------------------------------------------------------------------------------------------------------------
cofiguration (根节点)
属性
scan:默认true,为true时文件修改会重新加载
debug:默认false,为true时打印logback内部日志信息
scanPeriod:设置监测修改的时间间隔,单位毫秒
-------------------------------------------------------------------------------------------------------------------------------------
logger、root(configuration子节点)
属性
name(root没有):名称(适配的包名)
level:输出日志的级别
注意
可以指定多个appender,如果未指定appender,将继承最近父层声明的appender
root默认level为debug级别
logger 会把记录输出到它自身的 appender 和它所有祖先的 appender
-------------------------------------------------------------------------------------------------------------------------------------
appender(configuration子节点)
属性
name:指定appender的名称
class:指定appender的类型
子元素
filter
layout
通用
OutputStreamAppender
- ConsoleAppender
- FileAppender
- RollingFileAppender
属性
类型
描述
encoder
Encoder
参见 OutputStreamAppender 属性
target(console)
String
字 符 串 “ System.out ” 或 “ System.err ”。 默 认 为 “System.out”。
file(file)
String
被写入的文件名。如果文件不存在,则创建之。 没有默认值。 如果文件的父目录不存在,FileAppender 会自动创建各 级不存在的目录。
append(file)
boolean
如果 true,事件被追加到现存文件尾部。 如果 false,清空现存文件。 默认为 true。
rollingPolicy(rollingfile)
RollingPolicy
当发生滚动时,决定 RollingFileAppender 的行为。
triggeringPolicy(rollingfile)
TriggeringPolicy
告知 RollingFileAppender 何时激活滚动。
RollingPolicy
-
FixedWindowRollingPolicy 按窗口滚动
-
TimeBasedRollingPolicy 按时间滚动
<configuration> <!-- 按窗口滚动 --> <appender name="FILE_INDEX" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>testFile.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> <fileNamePattern>testFile.%i.log.zip</fileNamePattern> <minIndex>1</minIndex> <maxIndex>3</maxIndex> </rollingPolicy> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <maxFileSize>5MB</maxFileSize> </triggeringPolicy> <encoder> <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern> </encoder> </appender> <!-- 按时间滚动 --> <appender name="FILE_DATE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>logFile.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- daily rollover --> <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern> <!-- keep 30 days worth of history --> <maxHistory>30</maxHistory> <!-- 设置文件大小 <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>100MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> -->
</appender> <root level="DEBUG"> <appender-ref ref="FILE_INDEX" /> </root> </configuration>1 </rollingPolicy> 2 <encoder> 3 <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern> 4 </encoder>
SocketAppender(略)
JMSAppenderBase
- JMSTopicAppender
- JMSQueueAppender
属性
类型
描述
InitialContextFactoryName
String
初 始 JNDI 上 下 文 工 厂 的 类 名 。 如果有 jndi.properties,或 JMSAppenderBase 的子类运行 在应用程序服务器里,就不需要设置该属性。 如果设置了该属性,也应当设置 ProviderURL 属 性。
ProviderURL
String
JNDI 服务提供商的配置信息。属性值应当包含一 个 URL 字符串,比如 ldap://somehost:389。 只有当指定了 InitialContextFactoryName 时,才有 效;否则忽略该属性。
URLPkgPrefixes
String
包含当加载 URL 上下文工厂时所用到的包名前缀 列表,以冒号分隔。
UserName
String
创建主题或队列连接时的用户名。
Password
String
创建主题或队列连接时的密码。
TopicConnectionFactoryBindingName
String
主题工厂的名称。
TopicBindingName
String
主题名称。
QueueConnectionFactoryBindingName
String
队列工厂的名称。
QueueBindingName
String
队列名称。
1<configuration> 2 <appender name="Topic" class="ch.qos.logback.classic.net.JMSTopicAppender"> 3 <InitialContextFactoryName> 4 org.apache.activemq.jndi.ActiveMQInitialContextFactory 5 </InitialContextFactoryName> 6 <ProviderURL>tcp://localhost:61616</ProviderURL> 7 <TopicConnectionFactoryBindingName> 8 ConnectionFactory 9 </TopicConnectionFactoryBindingName> 10 <TopicBindingName>MyTopic</TopicBindingName> 11 </appender> 12 13 <appender name="Queue" class="ch.qos.logback.classic.net.JMSQueueAppender"> 14 <InitialContextFactoryName> 15 org.apache.activemq.jndi.ActiveMQInitialContextFactory 16 </InitialContextFactoryName> 17 <ProviderURL>tcp://localhost:61616</ProviderURL> 18 <QueueConnectionFactoryBindingName> 19 ConnectionFactory 20 </QueueConnectionFactoryBindingName> 21 <QueueBindingName>MyQueue</QueueBindingName> 22 </appender> 23 24 <root level="debug"> 25 <appender-ref ref="Topic" /> 26 </root> 27</configuration>
SMTPAppender(依赖 JavaMail API)
通过OnMarkerEvaluator去触发email
1Marker notifyAdminMarker = MarkerFactory.getMarker("NOTIFY_ADMIN"); 2logger.error(notifyAdminMarker, "This is a serious an error requiring the admin' attention", new Exception("Just testing")); 3 4 5<configuration> 6 <appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender"> 7 <evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator"> 8 <marker>NOTIFY_ADMIN</marker> 9 <!-- you specify add as many markers as you want --> 10 <marker>ANOTHER_MARKER</marker> 11 </evaluator> 12 <BufferSize>1050</BufferSize> 13 <SMTPHost>${smtpHost}</SMTPHost> 14 <To>${to}</To> 15 <From>${from}</From> 16 <layout class="ch.qos.logback.classic.html.HTMLLayout" /> 17 </appender> 18 <root> 19 <level value="debug" /> 20 <appender-ref ref="EMAIL" /> 21 </root> 22</configuration>
DBAppender(支持MySQL、SQLServer、Oracle)
表 logging_event
字段名
类型
描述
timestamp
big int
创建记录事件的时间戳。
formatted_message
text
经org.slf4j.impl.MessageFormatter 格式化后,被添加到记录 事件的消息。
logger_name
varchar
执行记录请求的 logger。
level_string
varchar
记录事件的级别。
reference_flag
smallint
用于标识那些关联了异常或 MDCproperty 值的记录事件。 其值由 ch.qos.logback.classic.db.DBHelper 计算。包含 MDC 或上下文属性的记录事件的 reference_flag 是 1。包含异常的 reference_flag 是 2。两者都包含的 reference_flag 是 3。
caller_filename
varchar
执行记录请求的文件名。
caller_class
varchar
执行记录请求的类。
caller_method
varchar
执行记录请求的方法。
caller_line
char
执行记录请求的行号。
event_id
int
记录事件的数据库 ID。
表 logging_event_property
字段名
类型
描述
event_id
int
记录事件的数据库 ID。
mapped_key
varchar
MDC 属性的键。
mapped_value
varchar
MDC 属性的值。
表 logging_event_exception
字段名
类型
描述
event_id
int
记录事件的数据库 ID。
i
smallint
完整的堆栈跟踪里的行索引。
trace_line
varchar
对应的行。
1<configuration> 2 <appender name="DB" class="ch.qos.logback.classic.db.DBAppender"> 3 <connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource"> 4 <dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource"> 5 <driverClass>com.mysql.jdbc.Driver</driverClass> 6 <jdbcUrl>jdbc:mysql://localhost:3306/logbackdb</jdbcUrl> 7 <user>logback</user> 8 <password>logback</password> 9 </dataSource> 10 </connectionSource> 11 </appender> 12 <root level="debug"> 13 <appender-ref ref="DB" /> 14 </root> 15</configuration>