使用前提
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 按时间滚动
testFile.log testFile.%i.log.zip 1 3 5MB %-4relative [%thread] %-5level %logger{35} - %msg%n logFile.log logFile.%d{yyyy-MM-dd}.log 30 </rollingPolicy> <encoder> <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern> </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
队列名称。
<configuration>
<appender name="Topic" class="ch.qos.logback.classic.net.JMSTopicAppender">
<InitialContextFactoryName>
org.apache.activemq.jndi.ActiveMQInitialContextFactory
</InitialContextFactoryName>
<ProviderURL>tcp://localhost:61616</ProviderURL>
<TopicConnectionFactoryBindingName>
ConnectionFactory
</TopicConnectionFactoryBindingName>
<TopicBindingName>MyTopic</TopicBindingName>
</appender>
<appender name="Queue" class="ch.qos.logback.classic.net.JMSQueueAppender">
<InitialContextFactoryName>
org.apache.activemq.jndi.ActiveMQInitialContextFactory
</InitialContextFactoryName>
<ProviderURL>tcp://localhost:61616</ProviderURL>
<QueueConnectionFactoryBindingName>
ConnectionFactory
</QueueConnectionFactoryBindingName>
<QueueBindingName>MyQueue</QueueBindingName>
</appender>
<root level="debug">
<appender-ref ref="Topic" />
</root>
</configuration>
SMTPAppender(依赖 JavaMail API)
通过OnMarkerEvaluator去触发email
Marker notifyAdminMarker = MarkerFactory.getMarker("NOTIFY_ADMIN");
logger.error(notifyAdminMarker, "This is a serious an error requiring the admin' attention", new Exception("Just testing"));
<configuration>
<appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
<evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
<marker>NOTIFY_ADMIN</marker>
<!-- you specify add as many markers as you want -->
<marker>ANOTHER_MARKER</marker>
</evaluator>
<BufferSize>1050</BufferSize>
<SMTPHost>${smtpHost}</SMTPHost>
<To>${to}</To>
<From>${from}</From>
<layout class="ch.qos.logback.classic.html.HTMLLayout" />
</appender>
<root>
<level value="debug" />
<appender-ref ref="EMAIL" />
</root>
</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
对应的行。
<configuration>
<appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
<connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">
<dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">
<driverClass>com.mysql.jdbc.Driver</driverClass>
<jdbcUrl>jdbc:mysql://localhost:3306/logbackdb</jdbcUrl>
<user>logback</user>
<password>logback</password>
</dataSource>
</connectionSource>
</appender>
<root level="debug">
<appender-ref ref="DB" />
</root>
</configuration>