logback 应用

LogBack -  一个通用可靠、快速灵活的日志框架,更多信息请参考官方网站

LogBack 将作为Log4j的替代,和slf4j组成新的日志系统的完整实现。LogBack分为三个模块:logback-core、logback- classic和logback-access。logback-core是其它两个模块的基础;logback-classic是log4j的一个改良版本; logback-access与Servlet容器集成提供通过Http来访问日志的功能。

SLF4J - 一个通用的日志门面库,为各种Logging API提供了一套通用的日志接口,更多信息请参考官方网站

SLF4J会根据classpath中所存在的适配器的jar来决定将使用的日志实现库。

 

Logback日志需要依赖一下jar包:

slf4j-api-1.6.0.jar

logback-core-0.9.21.jar

logback-classic-0.9.21.jar

logback-access-0.9.21.jar

主配置文件为logback.xml,放在src目录下或是WEB-INF/classes下,logback会自动加载

同时删除原来的commons-logging.jar和log4j.jar

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

public class Test {

  final Logger logger = LoggerFactory.getLogger(Test.class);

    public void logTest() {

      // 不再需要log.isDebugalbe(),代码更简洁

      logger.debug(”hello {}”, “amsz”);

      logger.info("hihi{}","hhhh");

      }

}

 

 

 

再看看logback.xml的配置:

<?xml version="1.0" encoding="UTF-8"?>

<configuration>

    <substitutionProperty name="log.base" value="../logs/hzg" />

    <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="logfile" class="ch.qos.logback.core.rolling.RollingFileAppender">

        <Encoding>UTF-8</Encoding>

        <File>${log.base}.log</File>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

            <FileNamePattern>${log.base}.%d{yyyy-MM-dd}.log.zip</FileNamePattern>

        </rollingPolicy>

          <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">

            <MaxFileSize>2MB</MaxFileSize>

        </triggeringPolicy>

        <layout class="ch.qos.logback.classic.PatternLayout">

            <pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern>

        </layout>

    </appender>

   

    <!-- 需要记录日志的包 -->

    <logger name="com.hzg.core">

        <level value="WARN" />

    </logger>

    <logger name="com.hzg.test">

        <level value="INFO" />

    </logger>   

   

    <logger name="org.springframework">

        <level value="WARN" />

    </logger>

    <logger name="org.hibernate">

        <level value="WARN" />

    </logger>

    <logger name="org.hibernate.SQL">

        <level value="WARN" />

    </logger>

        <logger name="org.hibernate.cache">

        <level value="ERROR" />

    </logger>

    <root>

        <level value="INFO" />

        <appender-ref ref="stdout" />

        <appender-ref ref="logfile" />

    </root>

</configuration>

 

 

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>
  <root level="DEBUG"><appender-ref ref="STDOUT" /></root>
</configuration>

logback.xml的基本配置信息都包含在configuration标签中,需要含有至少一个appender标签用于指定日志输出方式和输出格式,root标签为系统默认日志进程,通过level指定日志级别,通过appender-ref关联前面指定顶的日志输出方式。

例子中的appender使用的是ch.qos.logback.core.ConsoleAppender类,用于对控制台进行日志输出

其中encoder标签指定日志输出格式为“时间 线程 级别 类路径 信息”

logback的文件日志输出方式还提供多种日志分包策略

 

 

 

<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>E:/logs/mylog.txt</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- rollover daily -->
      <fileNamePattern>E:/logs/mylog-%d{yyyy-MM-dd_HH-mm}.%i.log</fileNamePattern>
      <maxHistory>5</maxHistory>
      <timeBasedFileNamingAndTriggeringPolicy
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <!-- or whenever the file size reaches 100MB -->
        <maxFileSize>100MB</maxFileSize>
      </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
    <encoder>
      <pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n</pattern>
    </encoder>
  </appender

文件日志输出采用的ch.qos.logback.core.rolling.RollingFileAppender类,它的基本属性包括<file>指定输入文件路径,encoder指定日志格式。其中,rollingPolicy标签指定的是日志分包策略,ch.qos.logback.core.rolling.TimeBasedRollingPolicy类实现的是基于时间的分包策略,分包间隔是根据fileNamePattern中指定的事件最小单位,比如例子中的%d{yyyy-MM-dd_HH-mm}的最小事件单位为分,它的触发方式就是1分钟,策略在每次想日志中添加新内容时触发,如果满足条件,就将mylog.txt复制到E:/logs/目录并更名为mylog-2010-06-22_13-13.1.log,并删除原mylog.txt。maxHistory的值为指定E:/logs目录下存在的类似mylog-2010-06-22_13-13.1.log文件的最大个数,当超过时会删除最早的文件。此外,策略还可以互相嵌套,比如本例中在时间策略中又嵌套了文件大小策略,ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP实现对单文件大小的判断,当超过maxFileSize中指定大大小时,文件名中的变量%i会加一,即在不满足时间触发且满足大小触发时,会生成mylog-2010-06-22_13-13.1.log和mylog-2010-06-22_13-13.2.log两个文件

 

 

.数据库日志

<appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
    <connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
       <dataSource
        class="com.mchange.v2.c3p0.ComboPooledDataSource">
      <driverClass>com.mysql.jdbc.Driver</driverClass>
      <url>jdbc:mysql://127.0.0.1:3306/databaseName</url>
      <user>root</user>
      <password>root</password>
      </dataSource>
    </connectionSource>
  </appender>

数据库输出使用ch.qos.logback.classic.db.DBAppender类

 

3、总结:

使用slf4j+logback的优势:

 

  • 支持按文件大小或基于时间的切分方式,可自定义命名模式
  • 支持文件打包(触发器方式)
  • 支持OSGI环境

如果在单纯的logging环境中,使用SLF4J意义不大。如果想在各种logger API中切换,SELF4J是理想选择,另外在新的项目中,使用SLF4J+Logback是比较好的日志框架选型。  

猜你喜欢

转载自mojianpo.iteye.com/blog/1141437