您的位置:首页 > 其它

SLF4J 的几种实际应用模式--:SLF4J+Log4J 与 SLF4J+LogBack

2014-10-22 16:57 295 查看
SLF4J(Simple Logging Facade for Java) 是一个通用的日志框架,不能何以谓之 Facade(门面),所扮眼的角色相当于 Jakarta Commons Logging。就像 JCL 需要底层的日志实现,如 Log4J、java.util.logging、Simple Logger 等来完成具体的信息输出,事实上基本总是 JCL+Log4J 那么一个绝配。SLF4J
的原旨也是能支持多种下层日志框架实现,但最好的日志实现仍然是 Log4J,所以本篇讲述 SLF4J 的第一种用法 SLF4J+Log4J。

需要的配置文件和组件包,下面三个
jar 文件和一个 properties 文件都是要放在项目的 ClassPath 上。

1. slf4j-api-1.5.11.jar

2. slf4j-log4j12-1.5.11.jar

3. log4j-1.2.15.jar

4. log4j.properties(也可以是 log4j.xml,本例中用 log4j.propertes)

log4j.properties

[java]
view plaincopyprint?

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.appender.db=org.apache.log4j.FileAppender
log4j.appender.db.File=${s2sh.root}/WEB-INF/logs/ssh.log
log4j.appender.db.Append=true
log4j.appender.db.layout=org.apache.log4j.PatternLayout
log4j.appender.db.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p][%c{1}] - %m%n

[java]
view plaincopyprint?

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

public class TestSlf4J {
private static final Logger logger = LoggerFactory.getLogger(TestSlf4j.class);
public static void main(String[] args) {
logger.info("Hello {}","SLF4J");
}
}

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

public class TestSlf4J {
private static final Logger logger = LoggerFactory.getLogger(TestSlf4j.class);
public static void main(String[] args) {
logger.info("Hello {}","SLF4J");
}
}


执行它,控制台输出:

[java]
view plaincopyprint?

2010-04-07 17:14:51,390 [com.unmi.TestSlf4j]-[INFO] Hello SLF4J

[xhtml]
view plaincopyprint?

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<encoder charset="GBK">
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="stdout" />
</root>
</configuration>

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<encoder charset="GBK">
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="stdout" />
</root>
</configuration>


在 log4j.xml 能做的配置,logback.xml 中也能做到,而且还增强了诸如 <if><then><else>、<filter>、<sift> 等更强的控制,请参考
logback 的手册 http://logback.qos.ch/manual/index.html

使用 Logback 的代码

[xhtml]
view plaincopyprint?

package com.unmi;

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

public class TestLogback {
private static final Logger logger = LoggerFactory.getLogger(TestLogback.class);

public static void main(String[] args) {
logger.info("Hello {}","TestLogback");
}
}

package com.unmi;

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

public class TestLogback {
private static final Logger logger = LoggerFactory.getLogger(TestLogback.class);

public static void main(String[] args) {
logger.info("Hello {}","TestLogback");
}
}

可以看到与使用 SLF4J 的代码没有任何区别,因为本来用的通用日志框架就是 SLF4J,说到底,这里的 Logback 就相当于 SLF4J+Log4J 使用方式中的
Log4J 绑定和 Log4J 的功能。

执行上面的代码,输出:

21:38:43.031 [main] INFO com.unmi.TestLogback - Hello TestLogback
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: