slf4j + Logback使用

使用logback轻松管理日志: [url]http://blog.csdn.net/mydeman/article/details/6716925[/url]
Logback日志使用详解:[url]http://www.cnblogs.com/davidwang456/p/4448011.html[/url]
logback的介绍-配置:[url]http://sunney2010.iteye.com/blog/1404723[/url]
slf4j + Logback详解:[url]http://donald-draper.iteye.com/admin/blogs/2332433[/url]
需要的jar
slf4j-api.jar
logback-core.jar
logback-classic.jar
log4j-over-slf4j.jar
jcl104-over-slf4j.jar
janino.jar
测试主类:
package org;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class testLogback {
private static Logger log = LoggerFactory.getLogger(testSFL4J.class);
public static void main(String[] args) {
log.debug("=======test root=========");
log.info("========test daily level info=========");
log.warn("========test warn=========");
log.error("========test error=========");
}
}

如果添加Log4j的相关jar包,则控制台输出为:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/E:/lib/slf4j-log4j12-1.7.9.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/E:/lib/logback-classic-0.9.27.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
[DEBUG] 2016-10-23 15:14:08,549 org.testLogback =======test root=========
[INFO ] 2016-10-23 15:14:08,549 org.testLogback ========test daily level info=========
[WARN ] 2016-10-23 15:14:08,549 org.testLogback ========test warn=========
[ERROR] 2016-10-23 15:14:08,549 org.testLogback ========test error=========
从上面信息可以看出,当有多个StaticLoggerBinder实现时,默认为Log4jLoggerFactory,
去除Log4j的相关jar包,控制输出:
15:24:53,431 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
15:24:53,432 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
15:24:53,432 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/F:/Myeclipse/Log/bin/logback.xml]
15:24:53,477 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
15:24:53,494 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
15:24:53,497 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [stdout]
15:24:53,506 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
15:24:53,542 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
15:24:53,543 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [file—debug]
15:24:53,555 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy - No compression will be used
15:24:53,555 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy - Will use the pattern F:/logback/debug.%d{yyyy-MM-dd}.log for the active file
15:24:53,558 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - The date pattern is 'yyyy-MM-dd' from file name pattern 'F:/logback/debug.%d{yyyy-MM-dd}.log'.
15:24:53,558 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Roll-over at midnight.
15:24:53,560 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Setting initial period to Sun Oct 23 15:24:53 CST 2016
15:24:53,560 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
15:24:53,561 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[file—debug] - Active log file name: F:/logback/debug.2016-10-23.log
15:24:53,561 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[file—debug] - File property is set to [null]
15:24:53,564 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
15:24:53,564 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [file—error]
15:24:53,565 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy - No compression will be used
15:24:53,565 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy - Will use the pattern F:/logback/error.%d{yyyy-MM-dd}.log for the active file
15:24:53,566 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - The date pattern is 'yyyy-MM-dd' from file name pattern 'F:/logback/error.%d{yyyy-MM-dd}.log'.
15:24:53,566 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Roll-over at midnight.
15:24:53,566 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Setting initial period to Sun Oct 23 15:24:53 CST 2016
15:24:53,566 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
15:24:53,566 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[file—error] - Active log file name: F:/logback/error.2016-10-23.log
15:24:53,566 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[file—error] - File property is set to [null]
15:24:53,566 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
15:24:53,566 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [file-str]
15:24:53,568 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.boolex.JaninoEventEvaluator] for [evaluator] property
15:24:53,910 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy - No compression will be used
15:24:53,910 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy - Will use the pattern F:/logback/contains.%d{yyyy-MM-dd}.log for the active file
15:24:53,910 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - The date pattern is 'yyyy-MM-dd' from file name pattern 'F:/logback/contains.%d{yyyy-MM-dd}.log'.
15:24:53,910 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Roll-over at midnight.
15:24:53,910 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Setting initial period to Sun Oct 23 15:24:53 CST 2016
15:24:53,910 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
15:24:53,911 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[file-str] - Active log file name: F:/logback/contains.2016-10-23.log
15:24:53,911 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[file-str] - File property is set to [null]
15:24:53,912 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.classic.db.DBAppender]
15:24:53,963 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [db]
15:24:53,968 |-INFO in ch.qos.logback.classic.joran.action.LevelAction - java.sql.Connection level set to DEBUG
15:24:53,968 |-INFO in ch.qos.logback.classic.joran.action.LevelAction - java.sql.Statement level set to DEBUG
15:24:53,968 |-INFO in ch.qos.logback.classic.joran.action.LevelAction - com.ibatis level set to DEBUG
15:24:53,968 |-INFO in ch.qos.logback.classic.joran.action.LevelAction - com.ibatis.common.jdbc.SimpleDataSource level set to DEBUG
15:24:53,968 |-INFO in ch.qos.logback.classic.joran.action.LevelAction - com.ibatis.common.jdbc.ScriptRunner level set to DEBUG
15:24:53,968 |-INFO in ch.qos.logback.classic.joran.action.LevelAction - com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate level set to DEBUG
15:24:53,968 |-INFO in ch.qos.logback.classic.joran.action.LevelAction - com.danga.MemCached level set to INFO
15:24:53,968 |-INFO in ch.qos.logback.classic.joran.action.LevelAction - org.springframework.test level set to DEBUG
15:24:53,968 |-INFO in ch.qos.logback.classic.joran.action.LevelAction - org.apache.struts2 level set to DEBUG
15:24:53,968 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to DEBUG
15:24:53,968 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [stdout] to Logger
15:24:53,970 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [file—debug] to Logger
15:24:53,970 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [file—error] to Logger
15:24:53,970 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [file-str] to Logger
15:24:53,970 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [db] to Logger

2016-10-23 15:24:53,976 [main] DEBUG org.testLogback - =======test root=========
2016-10-23 15:24:53,979 [main] INFO org.testLogback - ========test daily level info=========
2016-10-23 15:24:53,979 [main] WARN org.testLogback - ========test warn=========
2016-10-23 15:24:53,979 [main] ERROR org.testLogback - ========test error=========

去F盘logback文件夹下,可以看到相关日志文件
contains.2016-10-23.log
debug.2016-10-23.log
2016-10-23 15:24:53,976 [main] DEBUG org.testLogback - =======test root=========
error.2016-10-23.log
2016-10-23 15:24:53,979 [main] ERROR org.testLogback - ========test error=========
我的logback.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 控制台输出 -->
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern>
</encoder>
</appender>

<!-- 时间滚动输出 level为 DEBUG 日志 -->
<appender name="file—debug"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY </onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>F:/logback/debug.%d{yyyy-MM-dd}.log</FileNamePattern>
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder>
<pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>

<!-- 时间滚动输出 level为 ERROR 日志 -->
<appender name="file—error"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY </onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>F:/logback/error.%d{yyyy-MM-dd}.log</FileNamePattern>
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder>
<pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>

<!-- 特定过滤含有某字符串的日志 -->
<appender name="file-str"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator>
<expression>message.contains("str")</expression>
</evaluator>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>F:/logback/contains.%d{yyyy-MM-dd}.log
</FileNamePattern>
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder>
<pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern>
</encoder>
</appender>

<!-- 数据库输出 -->
<appender name="db" class="ch.qos.logback.classic.db.DBAppender">
<connectionSource
class="ch.qos.logback.core.db.DriverManagerConnectionSource">
<driverClass>com.mysql.jdbc.Driver</driverClass>
<url>jdbc:mysql://localhost:3306/test</url>
<user>root</user>
<password>123456</password>
</connectionSource>
</appender>

<logger name="java.sql.Connection">
<level value="DEBUG" />
</logger>
<logger name="java.sql.Statement">
<level value="DEBUG" />
</logger>
<logger name="com.ibatis">
<level value="DEBUG" />
</logger>
<logger name="com.ibatis.common.jdbc.SimpleDataSource">
<level value="DEBUG" />
</logger>
<logger name="com.ibatis.common.jdbc.ScriptRunner">
<level value="DEBUG" />
</logger>
<logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate">
<level value="DEBUG" />
</logger>
<logger name="com.danga.MemCached">
<level value="INFO" />
</logger>
<logger name="org.springframework.test">
<level value="DEBUG" />
</logger>
<logger name="org.apache.struts2">
<level value="DEBUG" />
</logger>
<root level="DEBUG">
<appender-ref ref="stdout" />
<appender-ref ref="file—debug" />
<appender-ref ref="file—error" />
<appender-ref ref="file-str" />
<appender-ref ref="db" />
</root>
</configuration>

总结:
[color=blue]从上面的测试可以看出logback日志,可以根据日志的类别去,输出到不同的文件,不用log4j那样要输出大于等于Appender日志等级的日志。[/color]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值