spring整合logback日志系统框架

记录,生成应用的异常信息是维护应用的重要手段,项目中常用的spring框架整合日志,最流行的就是logback,我们公司目前用的也是这个。和spring整合比较简单。

log4j与logback简要比较
本文意在阐述用logback替代log4j作为Spring MVC项目的日志处理组件。这两者虽然作者相同,但log4j早已被托管给Apache基金会维护,并且自从2012年5月之后就没有更新了。而logback从出生开始就是其作者奔着取代log4j的目的开发的,因此一方面logback继承了log4j大量的用法,使得学习和迁移的成本不高,另一方面logback在性能上要明显优于log4j,尤其是在大量并发的环境下,并且新增了一些log4j所没有的功能(如将日志文件压缩成zip包等)。

先介绍下环境和框架:win7+tom7+jdk1.7+ssm+maven3.3.9

下面正式为spring框架加入日志。

1.引入logback整合spring的依赖和各个依赖的作用讲解

        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        <dependency>
            <groupId>ch.qos.logbackgroupId>
            <artifactId>logback-classicartifactId>
            <version>1.1.3version>
        dependency>
        <dependency>
            <groupId>org.logback-extensionsgroupId>
            <artifactId>logback-ext-springartifactId>
            <version>0.1.2version>
        dependency>
        <dependency>
            <groupId>org.slf4jgroupId>
            <artifactId>jcl-over-slf4jartifactId>
            <version>1.7.12version>
        dependency>
        

pom.xml中注释掉的部分是为了说明logback的依赖所需的jar包由下面那三个引入的依赖就很全面了。不需要上面log4j和slf4j这些引入。

如上所示是集成所需要的依赖,其中:
第一个logback-classic包含了logback本身所需的slf4j-api.jar、logback-core.jar及logback-classsic.jar。
第二个logback-ext-spring是由官方提供的对Spring的支持,它的作用就相当于log4j中的Log4jConfigListener;这个listener,网上大多都是用的自己实现的,原因在于这个插件似乎并没有出现在官方文档的显要位置导致大多数人并不知道它的存在。
第三个jcl-over-slf4j是用来把Spring源代码中大量使用到的commons-logging替换成slf4j,只有在添加了这个依赖之后才能看到Spring框架本身打印的日志–即info文件中打印出的spring启动日志信息,否则只能看到开发者自己打印的日志。

引入依赖后,对应在项目maven库中导入的logback相关jar如下图:
spring整合logback日志系统框架_第1张图片

2.引入logback.xml日志配置文件。

这里特别注意引入位置(maven工程)在src/main/resource这个根目录下。

spring整合logback日志系统框架_第2张图片

logback.xml配置信息


<configuration scan="true" scanPeriod="60 seconds" debug="true">  
     
    <property name="appName" value="PersonalJiJin"/>
    <property name="logMaxSize" valule="100MB"/>
      
    <property name="rootPath" value="/home/wasadmin/logs"/>
    <contextName>${appName}contextName>

    
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss}|%t|%p| %m |%logger:%L%npattern>
        encoder>
    appender>


    <appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
    
        <file>${rootPath}/${appName}/debug/${appName}-dlog.logfile>
          
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${rootPath}/${appName}/debug/${appName}-dlog-%d{yyyy-MM-dd}-%d.logfileNamePattern>
            <maxHistory>30maxHistory>
              
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MBmaxFileSize>
            timeBasedFileNamingAndTriggeringPolicy>
        rollingPolicy>
           
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss}|%t|%p| %m |%logger:%L%npattern>
            <charset>UTF-8charset>
        encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUGlevel>
            <onMatch>ACCEPTonMatch>
            <onMismatch>DENYonMismatch>
        filter>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>DEBUGlevel>
        filter>
    appender>


    <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${rootPath}/${appName}/info/${appName}-ilog.logfile>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${rootPath}/${appName}/all/${appName}-ilog-%d{yyyy-MM-dd}-%i.logfileNamePattern>
            <maxHistory>30maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MBmaxFileSize>
            timeBasedFileNamingAndTriggeringPolicy>
        rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss}|%t|%p| %m |%logger:%L%npattern>
            <charset>UTF-8charset>
        encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFOlevel>
            <onMatch>ACCEPTonMatch>
            <onMismatch>DENYonMismatch>
        filter>
    appender>



    <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${rootPath}/${appName}/error/${appName}-elog.logfile>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${rootPath}/${appName}/all/${appName}-elog-%d{yyyy-MM-dd}-%e.logfileNamePattern>
            <maxHistory>30maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MBmaxFileSize>
            timeBasedFileNamingAndTriggeringPolicy>
        rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss}|%t|%p| %m |%logger:%L%npattern>
            <charset>UTF-8charset>
        encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERRORlevel>
            <onMatch>ACCEPTonMatch>
            <onMismatch>DENYonMismatch>
        filter>
    appender>

      





    <logger name="jdbc" level="INFO"/>
    <logger name="org" level="INFO"/>
    <logger name="net" level="INFO"/>
    <logger name="sql" level="INFO"/>
    <logger name="java.sql" level="INFO"/>
    <logger name="javax" level="INFO"/>

    
      
    <root level="DEBUG">
    
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="INFO"/>
        <appender-ref ref="DEBUG"/>
        <appender-ref ref="ERROR"/>
    root>    


configuration>

logback.xml日志配置文件的配置逻辑:
1.先对日志的基本配置声明:包括日志的输出路径— (日志路径,这里是相对路径,web项目eclipse下会输出到eclipse的安装目录下,如果部署到linux上的tomcat下,会输出到tomcat/bin目录 下 ) ,日志级别—(日志的输出级别由低到高(越来问题越严重)trace->debug->info->warn->error ),日志生成的文件名,日志文件大小等。
2.声明不同appender来具体定义系统不同级别的信息匹配记录,和生成文件的设置,只是定义,并没有引入本应用就不会用到。
3.为某些特定的包加上上面定义好的appender。用来区别对待系统一般的日志输出模式。
4.将定义好的appender添加到本应用的日志系统中。类是定时任务中先声明任务,在把任务加入到调度里才算这个任务开始被使用了。

3.在代码中对容易出现问题的地方引入日志记录。

主要分为两步:
1.在类下面声明全局的log
这里写图片描述
注意:如果在工具类中引入log,由于工具类的方法为static的,所以log也要声明为static才行。

private static Logger logger=LoggerFactory.getLogger(FileUtils.class);

2.在容易出问题的地方try...catch(){logger.error()}
spring整合logback日志系统框架_第3张图片

配置完成,启动项目就可以看到控制台输出的日志信息。自己在笔记本上可以再eclips安装盘的根目录找到日志输出的文件目录和文件。
spring整合logback日志系统框架_第4张图片
这就表示配置完成,日志效果有了。

参考资料:
1. Spring MVC集成slf4j-logback。如果想看更具体不放在src/main/resource根目录的logback.xml配置,可以点击这里。
2.logback与Spring、SpringMVC结合使用教程

你可能感兴趣的:(log4j/logback日志)