zoukankan      html  css  js  c++  java
  • Logback日志系统配置攻略

    logback是log4j作者推出的新日志系统,原生支持slf4j通用日志api,允许平滑切换日志系统,并且对简化应用部署中日志处理的工作做了有益的封装。

    官方地址为:http://logback.qos.ch/

    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会自动加载

    logback.xml的基本结构如下:

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

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

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

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

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

    1.文件日志

     1 <appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">  
     2     <file>E:/logs/mylog.txt</file>  
     3     <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
     4       <!-- rollover daily -->  
     5       <fileNamePattern>E:/logs/mylog-%d{yyyy-MM-dd_HH-mm}.%i.log</fileNamePattern>  
     6       <maxHistory>5</maxHistory>   
     7       <timeBasedFileNamingAndTriggeringPolicy  
     8             class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">  
     9         <!-- or whenever the file size reaches 100MB -->  
    10         <maxFileSize>100MB</maxFileSize>  
    11       </timeBasedFileNamingAndTriggeringPolicy>  
    12     </rollingPolicy>  
    13     <encoder>  
    14       <pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n</pattern>  
    15     </encoder>  
    16   </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两个文件。

     

    2.数据库日志

     

     1 <appender name="DB" class="ch.qos.logback.classic.db.DBAppender">  
     2     <connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">  
     3        <dataSource  
     4         class="com.mchange.v2.c3p0.ComboPooledDataSource">  
     5       <driverClass>com.<a href="http://lib.csdn.net/base/mysql" class='replace_word' title="MySQL知识库" target='_blank' style='color:#df3434; font-weight:bold;'>MySQL</a>.jdbc.Driver</driverClass>  
     6       <url>jdbc:mysql://127.0.0.1:3306/databaseName</url>  
     7       <user>root</user>  
     8       <password>root</password>  
     9       </dataSource>  
    10     </connectionSource>  
    11   </appender>  

    数据库输出使用ch.qos.logback.classic.db.DBAppender类,数据源支持c3p0数据连接池,例子中使用的MySql,其他配置方式请参考官方文档。

    使用数据库输出需要在数据库中建立3个表,建表脚本如下

     1 # Logback: the reliable, generic, fast and flexible logging framework.  
     2 # Copyright (C) 1999-2010, QOS.ch. All rights reserved.  
     3 #  
     4 # See http://logback.qos.ch/license.html for the applicable licensing   
     5 # conditions.  
     6 # This SQL script creates the required tables by ch.qos.logback.classic.db.DBAppender.  
     7 #  
     8 # It is intended for MySQL databases. It has been tested on MySQL 5.1.37   
     9 # on <a href="http://lib.csdn.net/base/linux" class='replace_word' title="Linux知识库" target='_blank' style='color:#df3434; font-weight:bold;'>Linux</a>  
    10   
    11 BEGIN;  
    12 DROP TABLE IF EXISTS logging_event_property;  
    13 DROP TABLE IF EXISTS logging_event_exception;  
    14 DROP TABLE IF EXISTS logging_event;  
    15 COMMIT;  
    16   
    17 BEGIN;  
    18 CREATE TABLE logging_event   
    19   (  
    20     timestmp         BIGINT NOT NULL,  
    21     formatted_message  TEXT NOT NULL,  
    22     logger_name       VARCHAR(254) NOT NULL,  
    23     level_string      VARCHAR(254) NOT NULL,  
    24     thread_name       VARCHAR(254),  
    25     reference_flag    SMALLINT,  
    26     arg0              VARCHAR(254),  
    27     arg1              VARCHAR(254),  
    28     arg2              VARCHAR(254),  
    29     arg3              VARCHAR(254),  
    30     caller_filename   VARCHAR(254) NOT NULL,  
    31     caller_class      VARCHAR(254) NOT NULL,  
    32     caller_method     VARCHAR(254) NOT NULL,  
    33     caller_line       CHAR(4) NOT NULL,  
    34     event_id          BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY  
    35   );  
    36 COMMIT;  
    37 BEGIN;  
    38 CREATE TABLE logging_event_property  
    39   (  
    40     event_id          BIGINT NOT NULL,  
    41     mapped_key        VARCHAR(254) NOT NULL,  
    42     mapped_value      TEXT,  
    43     PRIMARY KEY(event_id, mapped_key),  
    44     FOREIGN KEY (event_id) REFERENCES logging_event(event_id)  
    45   );  
    46 COMMIT;  
    47 BEGIN;  
    48 CREATE TABLE logging_event_exception  
    49   (  
    50     event_id         BIGINT NOT NULL,  
    51     i                SMALLINT NOT NULL,  
    52     trace_line       VARCHAR(254) NOT NULL,  
    53     PRIMARY KEY(event_id, i),  
    54     FOREIGN KEY (event_id) REFERENCES logging_event(event_id)  
    55   );  
    56 COMMIT;  

    3.其他

    此外logback还提供基于mail,基于jmx等多种日志输出方式,你也可以通过继承ch.qos.logback.core.AppenderBase自己写appender实现

     

    除了使用默认的日志主线程<root>外,还可以通过<logger>标签定制其他日志线程如:

       

    1 <logger name="com.test" level="DEBUG">  
    2         <appender-ref ref="STDOUT" />  
    3 </logger>  

    其中name指定线程针对的包路径,level是日志级别,<appender-ref>定义使用那种appender。

    例如要实现打印jdbc提交的sql,可以加入如下logger:

    1 <logger name="Java.sql.Connection" level="DEBUG"><appender-ref ref="STDOUT" /></logger>

    完整的logback.xml

     1 <?xml version="1.0" encoding="UTF-8"?>  
     2 <configuration>  
     3   <!-- log output to file  -->  
     4   <appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">  
     5     <file>E:/logs/mylog.txt</file>  
     6     <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
     7       <!-- rollover daily -->  
     8       <fileNamePattern>E:/logs/mylog-%d{yyyy-MM-dd_HH-mm}.%i.log</fileNamePattern>  
     9       <maxHistory>5</maxHistory>   
    10       <timeBasedFileNamingAndTriggeringPolicy  
    11             class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">  
    12         <!-- or whenever the file size reaches 100MB -->  
    13         <maxFileSize>100MB</maxFileSize>  
    14       </timeBasedFileNamingAndTriggeringPolicy>  
    15     </rollingPolicy>  
    16     <encoder>  
    17       <pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n</pattern>  
    18     </encoder>  
    19   </appender>  
    20 <!-- log output to console  -->  
    21 <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">  
    22     <encoder>  
    23       <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>  
    24     </encoder>  
    25   </appender>  
    26 <!--  log output to db-->  
    27 <appender name="DB" class="ch.qos.logback.classic.db.DBAppender">  
    28     <connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">  
    29        <dataSource  
    30         class="com.mchange.v2.c3p0.ComboPooledDataSource">  
    31       <driverClass>com.mysql.jdbc.Driver</driverClass>  
    32       <url>jdbc:mysql://127.0.0.1:3306/tunneldb</url>  
    33       <user>root</user>  
    34       <password>123123</password>  
    35       </dataSource>  
    36     </connectionSource>  
    37   </appender>  
    38   
    39     <logger name="com.ttt.ttt" level="DEBUG">  
    40         <appender-ref ref="STDOUT" />  
    41     </logger>  
    42    
    43     <logger name="java.sql.Connection" level="DEBUG"><appender-ref ref="STDOUT" /></logger>  
    44      <!--  打印sql  
    45     <logger name="java.sql.Statement" level="DEBUG"><appender-ref ref="STDOUT" /></logger>  
    46     <logger name="java.sql.PreparedStatement" level="DEBUG"><appender-ref ref="STDOUT" /></logger>  
    47       
    48     <logger name="java.sql.ResultSet" level="DEBUG"><appender-ref ref="STDOUT" /></logger>  
    49     -->  
    50   <root level="DEBUG"><appender-ref ref="ROLLING" /></root>  
    51 </configuration>  

    总结:logback提供了丰富而高效的日志输出方式,并通过滚动策略,将实施时复杂的备份策略整合,极大的简化的部署成本,有兴趣的朋友可已考虑放到自己的项目里.官方提供了几百页的文档,内容相当详细,更多的内容请参照官方文档。

    原文:http://blog.csdn.net/jiaincs/article/details/5686287

  • 相关阅读:
    环境是如何建立的 启动文件有什么
    环境中存储的是什么
    串行 并行 异步 同步
    TPC-H is a Decision Support Benchmark
    进程通信类型 管道是Linux支持的最初Unix IPC形式之一 命名管道 匿名管道
    删除环境变量
    14.3.2.2 autocommit, Commit, and Rollback 自动提交 提交和回滚
    14.3.2.2 autocommit, Commit, and Rollback 自动提交 提交和回滚
    14.3.2.1 Transaction Isolation Levels 事务隔离级别
    14.3.2.1 Transaction Isolation Levels 事务隔离级别
  • 原文地址:https://www.cnblogs.com/chenfeng1122/p/6179376.html
Copyright © 2011-2022 走看看