The blog of Astro Qi
posts - 40, comments - 58, trackbacks - 0, articles - 0
BlogJava
::
首页
::
新随笔
::
联系
::
聚合
::
管理
SLF4J + logBack
Posted on 2010-11-17 14:33
Astro.Qi
阅读(2525)
评论(0)
编辑
收藏
所属分类:
Java
一. Log4j+commons-logging
JAR包
commons-logging-1.1.jar
log4j-1.2.15.jar
配置文件
commons-logging.properties
log4j.xml
commons-logging.jar包读取commons-logging.properties中指定的log,自动加载日志配置
在commons-logging+log4j组合中commons-logging.properties指定的日志为:
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
log4j指定具体日志输出配置
如果未选用commons-logging,可以在启动项目中,主动加载log4j的配置文件
二. slf4j+Logback
JAR包
slf4j-api-1.5.2.jar
logback-classic-0.9.9.jar
logback-core-0.9.9.jar
配置文件
Logback.xml
logback的加载采用编码加载
Java代码
String logbackCfg =
"/config/logback.xml"
;
URL logURL =
new
ClassPathResource(logbackCfg).getURL();
ILoggerFactory loggerFactory = LoggerFactory.getILoggerFactory();
LoggerContext loggerContext = (LoggerContext) loggerFactory;
loggerContext.shutdownAndReset();
JoranConfigurator configurator =
new
JoranConfigurator();
configurator.setContext(loggerContext);
configurator.doConfigure(logURL);
三. Slf4j+log4j
JAR包
slf4j-api-1.5.2.jar
slf4j-log4j12-1.5.2.jar
log4j-1.2.15.jar
配置文件
Logback.xml
四. Slf4j+logback+log4j
注:这种情况下是项目中有log4j输出的日志以及logback数据的日志.老项目改造,log4j和logback共存的情况下.(当选用spring+slf4j+logback的时候,spring的日志输出是log4j的,这个时候采用这种配置.)
JARbao
log4j-over-slf4j-1.5.2.jar
logback-classic-0.9.9.jar
logback-core-0.9.9.jar
slf4j-api-1.5.2.jar
配置文件
Logback.xml
配置加载
Java代码
String logbackCfg =
"/config/logback.xml"
;
URL logURL =
new
ClassPathResource(logbackCfg).getURL();
ILoggerFactory loggerFactory = LoggerFactory.getILoggerFactory();
LoggerContext loggerContext = (LoggerContext) loggerFactory;
loggerContext.shutdownAndReset();
JoranConfigurator configurator =
new
JoranConfigurator();
configurator.setContext(loggerContext);
configurator.doConfigure(logURL);
五. Log4j配置文件示例
Java代码
<?xml version=
"1.0"
encoding=
"UTF-8"
?>
<!DOCTYPE log4j:configuration SYSTEM
"log4j.dtd"
>
<log4j:configuration xmlns:log4j=
"http://jakarta.apache.org/log4j/"
>
<!-- 控制台输出-->
<appender name=
"CONSOLE"
class
=
"org.apache.log4j.ConsoleAppender"
>
<param name=
"Target"
value=
"System.out"
/>
<param name=
"Threshold"
value=
"INFO"
/>
<layout
class
=
"org.apache.log4j.PatternLayout"
>
<param name=
"ConversionPattern"
value=
"%d{yyyy-MM-dd HH:mm:ss sss}[%-p][%-c][line:%-L] \r\n %m%n"
/>
</layout>
<!— 以下是过滤一些不需要输出的log信息 -->
<filter
class
=
"org.apache.log4j.varia.StringMatchFilter"
>
<param name=
"StringToMatch"
value=
"new a seq no spend"
/>
<param name=
"AcceptOnMatch"
value=
"false"
/>
</filter>
<filter
class
=
"org.apache.log4j.varia.StringMatchFilter"
>
<param name=
"StringToMatch"
value=
"new hi[type="
/>
<param name=
"AcceptOnMatch"
value=
"false"
/>
</filter>
<filter
class
=
"org.apache.log4j.varia.StringMatchFilter"
>
<param name=
"StringToMatch"
value=
"FileTransfer.execCommand()"
/>
<param name=
"AcceptOnMatch"
value=
"false"
/>
</filter>
</appender>
<!--文件输出 按照文件大小滚动文件-->
<appender name=
"xxxx_file"
class
=
"org.apache.log4j.RollingFileAppender"
>
<param name=
"Append"
value=
"true"
/>
<param name=
"Threshold"
value=
"INFO"
/>
<param name=
"File"
value=
"xxxx.log"
/>
<param name=
"MaxFileSize"
value=
"100MB"
/>
<param name=
"MaxBackupIndex"
value=
"15"
/>
<layout
class
=
"org.apache.log4j.PatternLayout"
>
<param name=
"ConversionPattern"
value=
"%d{yyyy-MM-dd HH:mm:ss sss}[%-p][%-c][line:%-L] \r\n %m%n"
/>
</layout>
<filter
class
=
"org.apache.log4j.varia.StringMatchFilter"
>
<param name=
"StringToMatch"
value=
"new a seq no spend"
/>
<param name=
"AcceptOnMatch"
value=
"false"
/>
</filter>
<filter
class
=
"org.apache.log4j.varia.StringMatchFilter"
>
<param name=
"StringToMatch"
value=
"new hi[type="
/>
<param name=
"AcceptOnMatch"
value=
"false"
/>
</filter>
<filter
class
=
"org.apache.log4j.varia.StringMatchFilter"
>
<param name=
"StringToMatch"
value=
"FileTransfer.execCommand()"
/>
<param name=
"AcceptOnMatch"
value=
"false"
/>
</filter>
</appender>
<!-- 错误输出 过滤出错误日志信息-->
<appender name=
"xxxx_error"
class
=
"org.apache.log4j.RollingFileAppender"
>
<param name=
"Append"
value=
"true"
/>
<param name=
"Threshold"
value=
"ERROR"
/>
<param name=
"File"
value=
"xxxx-error.log"
/>
<param name=
"MaxFileSize"
value=
"100MB"
/>
<param name=
"MaxBackupIndex"
value=
"4"
/>
<layout
class
=
"org.apache.log4j.PatternLayout"
>
<param name=
"ConversionPattern"
value=
"%d{yyyy-MM-dd HH:mm:ss sss}[%-p][%-c][line:%-L] \r\n %m%n"
/>
</layout>
</appender>
<!-- 根loggr -->
<root>
<appender-ref ref=
"CONSOLE"
/>
<appender-ref ref=
"xxxx_file"
/>
<appender-ref ref=
"xxxx_file_error"
/>
</root>
</log4j:configuration>
六. Logback配置文件示例
Java代码
<?xml version=
"1.0"
encoding=
"UTF-8"
?>
<!DOCTYPE configuration>
<configuration>
<jmxConfigurator />
<!-- 控制台输出日志 -->
<appender name=
"STDOUT"
class
=
"ch.qos.logback.core.ConsoleAppender"
>
<layout
class
=
"ch.qos.logback.classic.PatternLayout"
>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{
36
} - %msg%n</pattern>
</layout>
</appender>
<!-- 文件输出日志 (文件大小策略进行文件输出,超过指定大小对文件备份)-->
<appender name=
"FILE"
class
=
"ch.qos.logback.core.rolling.RollingFileAppender"
>
<File>xxxx.log</File>
<rollingPolicy
class
=
"ch.qos.logback.core.rolling.FixedWindowRollingPolicy"
>
<FileNamePattern>xxxx.log.%i.bak</FileNamePattern>
<MinIndex>
1
</MinIndex>
<MaxIndex>
12
</MaxIndex>
</rollingPolicy>
<triggeringPolicy
class
=
"ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"
>
<MaxFileSize>100MB</MaxFileSize>
</triggeringPolicy>
<layout
class
=
"ch.qos.logback.classic.PatternLayout"
>
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{
36
} - %msg%n</Pattern>
</layout>
</appender>
<appender name=
"FILE-ERROR"
class
=
"ch.qos.logback.core.rolling.RollingFileAppender"
>
<filter
class
=
"ch.qos.logback.classic.filter.LevelFilter"
>
<level>ERROR</level>
<OnMismatch>DENY</OnMismatch>
<OnMatch>ACCEPT</OnMatch>
</filter>
<File>xxxx-err.log</File>
<rollingPolicy
class
=
"ch.qos.logback.core.rolling.FixedWindowRollingPolicy"
>
<FileNamePattern>xxxx-err.log.%i.bak</FileNamePattern>
<MinIndex>
1
</MinIndex>
<MaxIndex>
3
</MaxIndex>
</rollingPolicy>
<triggeringPolicy
class
=
"ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"
>
<MaxFileSize>100MB</MaxFileSize>
</triggeringPolicy>
<layout
class
=
"ch.qos.logback.classic.PatternLayout"
>
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{
36
} - %msg%n</Pattern>
</layout>
</appender>
<!--这里指定logger name 是为jmx设置日志级别做铺垫 -->
<logger name=
"com.xxx.xxx"
>
<level value=
"INFO"
/>
<appender-ref ref=
"STDOUT"
/>
<appender-ref ref=
"FILE"
/>
<appender-ref ref=
"FILE-ERROR"
/>
</logger>
</configuration>
七. 相关简单说明
Log4j
Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务 器、NT的事件记录器、UNIX Syslog守护进程等;用户也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,用户能够更加细致地控制日志的生成过程。这些可以通过一个 配置文件来灵活地进行配置,而不需要修改程序代码
Slf4j
简单日记门面(Facade)SLF4J是为各种loging APIs提供一个简单统一的接口,从而使得最终用户能够在部署的时候配置自己希望的loging APIs实现。 Logging API实现既可以选择直接实现SLF4J接的loging APIs如: NLOG4J、SimpleLogger。也可以通过SLF4J提供的API实现来开发相应的适配器如Log4jLoggerAdapter、JDK14LoggerAdapter。
Logback
Logback是由log4j创始人设计的又一个开源日记组件。logback当前分成三个模块:logback-core,logback- classic和logback-access。logback-core是其它两个模块的基础模块。logback-classic是log4j的一个 改良版本。此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日记系统如log4j或JDK14 Logging。logback-access访问模块与Servlet容器集成提供通过Http来访问日记的功能。
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
相关文章:
对 java.nio.ByteBuffer 的理解
字符编码详解及由来(UNICODE,UTF-8,GBK)
SLF4J + logBack
byte[] to int
Java 中 byte与char、String互转原理
Java Stack栈和Heap堆的区别
Apache James 收发内外网邮件的配置
Web Services Xfire
JDBC ORACLE CLOB (用分页思想解决兆级以上的字符流操作问题)
JavaMail API 简介
Powered by:
BlogJava
Copyright © Astro.Qi
日历
<
2010年11月
>
日
一
二
三
四
五
六
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(4)
给我留言
查看公开留言
查看私人留言
随笔分类
Android(1)
C/C++(2)
Hibernate(3)
Java(14)
JavaFX(2)
Linux(1)
Living(6)
Oracle(9)
Spring(2)
随笔档案
2011年5月 (1)
2011年4月 (3)
2010年12月 (1)
2010年11月 (4)
2009年10月 (1)
2009年6月 (1)
2009年4月 (1)
2009年2月 (2)
2009年1月 (9)
2008年8月 (1)
2008年7月 (3)
2008年6月 (11)
2008年1月 (1)
2007年12月 (1)
Java
《深入浅出 Java Concurrency》目录
Java FX
JavaFX中国社区
JavaFX脚本语言
JavaEE博客
JavaEE
深入解析Spring MVC与Web Flow
Odin博客
Linux服务器技术
ORACLE和DB2的不同
Open WebMail
Open WebMail 安装,设置,问题解决
Open WebMail 完全安装手册
Open WebMail 官方站台
Others
JDK5多线程框架java.util.concurrent,android中也是可以用的
Android
Android 02
Fedare安裝ORACLE 9i
Fedora 9完全配置
oracle for linux 安装
Red Hat Enterprise Linux 5(32Bit/64Bit)安装Oracle(10g/11g)
redhat安装oracle
redhat安装oracle 2
Spring Security
Spring Security提高
鳥哥的 Linux 私房菜
WAP博客
WAP博客--Groovy和Grails简介
WAP博客--Oracle备份Clob数据
WAP博客--Oracle常用命令
搜索
最新评论
1. re: 对 java.nio.ByteBuffer 的理解[未登录]
12
--1
2. re: 对 java.nio.ByteBuffer 的理解[未登录]
1
--1
3. re: 对 java.nio.ByteBuffer 的理解[未登录]
11
--1
4. re: 对 java.nio.ByteBuffer 的理解[未登录]
1
--1
5. re: Apache James 收发内外网邮件的配置
不能删除邮件,楼主有遇到过这个问题吗?
--gxy
阅读排行榜
1. Apache james mailserver + Claros inTouch webmail(7476)
2. Apache James 收发内外网邮件的配置(5313)
3. Oracle热备份(3009)
4. SLF4J + logBack(2525)
5. Eclipse+CDT+MinGW搭建C++环境(2431)
评论排行榜
1. Apache james mailserver + Claros inTouch webmail(33)
2. FCKeditor2.6 for JSP 配置方法(12)
3. Apache James 收发内外网邮件的配置(4)
4. 对 java.nio.ByteBuffer 的理解(4)
5. Hibernate自定义表单完全解决方案(无需重置SessionFactory)(1)