Java日志框架

原文请看 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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值