标签:直接 layout important lmin ram 控制 code lte idt
Log4j
logback-access訪问模块与Servlet容器集成提供通过Http来訪问日记的功能。
但因为它使用了ClassLoader寻找和加载底层的日志库, 导致了象OSGI这种框架无法正常工作,因为其不同的插件使用自己的ClassLoader。 OSGI的这种机制保证了插件互相独立。然而确使Apache Common-Logging无法工作。
拼装消息被推迟到了它可以确定是不是要显示这条消息的时候,可是获取參数的代价并没有幸免。
同一时候,日志中的參数若超过三个,则须要将參数以数组的形式传入,如:
如今,Hibernate、Jetty、Spring-OSGi、Wicket和MINA等项目都已经迁移到了SLF4J,由此可见SLF4J的影响力不可忽视。
一、SLF4J 的几种实际应用模式--之中的一个:SLF4J+Log4J
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.7.7.jar
2. slf4j-log4j12-1.7.7.jar
3. log4j-1.2.17.jar
4. log4j.properties(也能够是 log4j.xml,本例中用 log4j.propertes)
maven:
pom.xml
<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.7</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.7</version> </dependency>
前两个包在 http://www.slf4j.org/download.html 处下载,后一个包在http://logging.apache.org/log4j/1.2/download.html 下载,可能包文件名称中的版本有些差,不要紧。
log4j.properties 曾经该是怎么写,如今还是怎么写,比方一个最简单的内容,仅仅向控制台输出日志信息,例如以下:
log4j.xml文件:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" > <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'> <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss}] %5p %C(%F:%L) - %m%n" /> </layout> </appender> <appender name="DEBUG" class="org.apache.log4j.RollingFileAppender"> <param name="File" value="/var/log/w3pc/debug.log" /> <param name="Append" value="true" /> <param name="MaxFileSize" value="5120KB" /> <param name="MaxBackupIndex" value="7" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss}] %5p %C(%F:%L) - %m%n" /> </layout> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="LevelMin" value="DEBUG" /> <param name="LevelMax" value="DEBUG" /> </filter> </appender> <appender name="INFO" class="org.apache.log4j.RollingFileAppender"> <param name="File" value="/var/log/w3pc/info.log" /> <param name="Append" value="true" /> <param name="MaxFileSize" value="5120KB" /> <param name="MaxBackupIndex" value="7" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss}] %5p %C(%F:%L) - %m%n" /> </layout> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="LevelMin" value="INFO" /> <param name="LevelMax" value="INFO" /> </filter> </appender> <appender name="WARN" class="org.apache.log4j.RollingFileAppender"> <param name="File" value="/var/log/w3pc/warn.log" /> <param name="Append" value="true" /> <param name="MaxFileSize" value="5120KB" /> <param name="MaxBackupIndex" value="7" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss}] %5p %C(%F:%L) - %m%n" /> </layout> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="LevelMin" value="WARN" /> <param name="LevelMax" value="WARN" /> </filter> </appender> <appender name="ERROR" class="org.apache.log4j.RollingFileAppender"> <param name="File" value="/var/log/w3pc/error.log" /> <param name="Append" value="true" /> <param name="MaxFileSize" value="5120KB" /> <param name="MaxBackupIndex" value="7" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss}] %5p %C(%F:%L) - %m%n" /> </layout> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="LevelMin" value="ERROR" /> <param name="LevelMax" value="ERROR" /> </filter> </appender> <root> <priority value="INFO" /> <appender-ref ref="INFO"/> <appender-ref ref="WARN"/> <appender-ref ref="DEBUG"/> <appender-ref ref="ERROR"/> <appender-ref ref="STDOUT"/> </root> </log4j:configuration>
二、 SLF4J 的几种实际应用模式--之中的一个:SLF4J+Logback
前面讲的 SLF4J 的使用方法之中的一个是 SLF4J+Log4J,而这里要推出的组合是 SLF4J+LogBack。不用 Log4J?难道还有比 Log4J 更好的日志实现吗?是的,答案就是LogBack。假如你知道 LogBack 和 Log4J 是同出一位大师之手,你就不会认为吃惊了。
LogBack 对 Log4J 进行了增强,并投入了 SLF4J 的怀抱。它还被作者认定为 Log4J 的继任者。
为什么叫做 Logback,我就不知道了,反正不要叫做 Brokeback 即可。这里是推崇用 Logback 替代 Log4J 的十几个理由:Reasons to prefer logback over log4j。说的大至是更快。好測试。与 SLF4J 关系紧;文档丰富。能自己主动载入配置文件。多个 JVM 写一个日志文件,或其它 I/O 错误时不影响程序运行;配置文件里增加条件控制;强大的日志过滤;更强的日志切分功能;自己主动压缩、删除日志文件;异常栈中很多其它的数据信息。
Logback 分为三个模块:logback-core,logback-classic,logback-access。logback-core 是核心。logback-classic 改善了 log4j,且自身实现了 SLF4J API。所以即使用 Logback 你仍然能够使用其它的日志实现,如原始的 Log4J,java.util.logging 等;logback-access 让你方便的訪问日志信息。如通过 http 的方式。
还得提一点。Logback 能更好的放到 OSGI 环境中。好了,简单绍完了 Logback,就来看看详细怎么用它。
须要的配置文件和组件包,以下三个 jar 文件和一个 xml文件都是要放在项目的 ClassPath 上。
1. slf4j-api-1.5.11.jar
2. logback-core-0.9.20.jar
3. logback-classic-0.9.20.jar
4. logback.xml 或 logback-test.xml (类似于 log4j.properties/log4j.xml)
三、SLF4J如何定位到详细用哪个log
在应用中,通过LoggerFactory类的静态getLogger()获取logger。通过查看该类的代码能够看出,终于是通过StaticLoggerBinder.SINGLETON.getLoggerFactory()方法获取LoggerFactory然后,在通过该详细的LoggerFactory来获取logger的。类org.slf4j.impl.StaticLoggerBinder并不在slf4j-api-1.5.2.jar包中。细致查看每一个与详细日志系统相应的jar包,就会发现,相应的jar包都有一个org.slf4j.impl.StaticLoggerBinder的实现,不同的实现返回与该日志系统相应的LoggerFactory,因此就实现了所谓的静态绑定,达到仅仅要选取不同jar包就能简单灵活配置的目的。
【Java】日志知识总结和经常使用组合配置(commons-logging,log4j,slf4j,logback)
标签:直接 layout important lmin ram 控制 code lte idt
原文地址:http://www.cnblogs.com/jhcelue/p/7379765.html