原文请看 http://www.cnblogs.com/chenhongliang/p/5312517.html
Log4j
Log4j是apache下一个功能非常丰富的java日志库实现,Log4j应该是出现比较早而且最受欢迎的java日志组
件,它是基于java的开源的日志组件。Log4j的功能非常强大,通过Log4j可以把日志输出到控制台、文件、用户界面。也可以输出到操作系统的事件记录器和一些系统常驻进程。值得一提的是:Log4j可以允许你非常便捷地自定义日志格式和日志等级,可以帮助开发人员全方位的掌控自己的日志信息
Log4j2
Log4j2是Log4j1的升级版本。Log4j2基本上把Log4j版本的核心全部重构掉了,而且基于Log4j做了很多优化和改变
Logback
Logback是由Log4j创始人设计的另一个开源日志组件,也是作为Log4j的替代者出现的。而且官方是建议和
Slf4j一起使用,你们一定不知道Logback、slf4j、Log4j都是出自同一个人吧。 Logback是在Log4j的基础上做的改进版本,而Slf4j又是同一个人设计的,所以默认就对Slf4j无缝结合。
SLF4j
SLF4j(Simple Logging Facade For Java)是基于API的java日志框架,SLF4j提供了一个简单统一的日
志记录接口,开发者在配置和部署时,只需要实现这个接口就可以实现日志功能。可以说,它并不是一个具体的日志解决方案,它只是服务于各种各样的日志系统,允许最终用户在部署应用上使用自己常用的日志系统
Commons-Logging
Common-logging 为众多具体的日志实现库提供了一个统一的接口,和SLF4j的作用类似,它允许在运行时绑定任意的日志库;
这里其实有个小故事,当年apache说服Log4j以及其他的日志框架按照Commons-Logging的标准来编写,但是由于Commons-Logging的类加载有点问题,实现起来不友好。因此Log4j的作者就创作了Slf4j,也因此与Commons-Logging两份天下
常用的组合方式
Slf4j与Logback组合使用
Commons Logging与Log4j组合使用
官网
https://www.slf4j.org/manual.html
https://logback.qos.ch/manual/configuration.html
logback开发
1、maven添加依赖包
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.0.13</version>
</dependency>
Maven会下载三个jar包
logback-classic-1.0.13.jar
logback-core-1.0.13.jar
slf4j-api-1.7.5.jar
2、配置logback.xml放在classpath下
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<substitutionProperty name="log.base" value="logs/rice" />
<substitutionProperty name="max.size" value="100MB" />
<jmxConfigurator />
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern>
</layout>
</appender>
<appender name="file.debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${log.base}/rice-debug.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${log.base}/rice-debug.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>${max.size}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern>
</layout>
</appender>
<appender name="file.info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${log.base}/rice-info.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${log.base}/rice-info.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>${max.size}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern>
</layout>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="file.warn" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${log.base}/rice-warn.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${log.base}/rice-warn.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>${max.size}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern>
</layout>
<!-- 临界值过滤器,过滤掉低于指定临界值的日志 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level>
</filter>
</appender>
<root level="debug">
<appender-ref ref="stdout" />
<appender-ref ref="file.debug" />
<appender-ref ref="file.info" />
<appender-ref ref="file.warn" />
</root>
</configuration>
3、编码
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private final static Logger logger = LoggerFactory.getLogger(HelloWorld.class);
logger.info("welcome {}", u.getUserName());
4、输出结果如下
2017-07-27 11:39:52,603 [http-bio-8081-exec-7] INFO com.rice.mvc.service.impl.UserServiceImpl - queryUserInfo
2017-07-27 11:39:52,606 [http-bio-8081-exec-7] INFO com.rice.mvc.controller.HelloWorld - welcome rice