springmvc logback日志

待我称王封你为后i 2022-06-16 03:43 390阅读 0赞

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的基本结构如下:

[xhtml] view plain copy

  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关联前面指定顶的日志输出方式。

{此处插入一下日志级别的介绍哈:

它们定义了日志显示的级别,一共分为五个级别:DEBUG、INFO、WARN、ERROR和FATAL。这五个级别是有顺序的,DEBUG < INFO < WARN < ERROR < FATAL,明白这一点很重要,这里Log4j有一个规则:假设设置了级别为P,如果发生了一个级别Q比P高,则可以启动,否则屏蔽掉。如果的话,那么对应的debug日志将不会出现在打印日志中,而info,error,warn,fatal等日志会打印。}

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

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

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

1.文件日志

[xhtml] view plain copy

  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. <**fileNamePattern**>E:/logs/mylog-%d{yyyy-MM-dd_HH-mm}.%i.log</**fileNamePattern**>
  5. <**maxHistory**>5</**maxHistory**>
  6. <**timeBasedFileNamingAndTriggeringPolicy**
  7. class=”ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP”>
  8. <**maxFileSize**>100MB</**maxFileSize**>
  9. </**timeBasedFileNamingAndTriggeringPolicy**>
  10. </**rollingPolicy**>
  11. <**encoder**>
  12. <**pattern**>%date %level [%thread] %logger{36} [%file : %line] %msg%n</**pattern**>
  13. </**encoder**>
  14. </**appender**

文件日志输出采用的ch.qos.logback.core.rolling.RollingFileAppender类,它的基本属性包括指定输入文件路径,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.数据库日志

[xhtml] view plain copy

  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个表,建表脚本如下

[xhtml] view plain copy

  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. BEGIN;
  11. DROP TABLE IF EXISTS logging_event_property;
  12. DROP TABLE IF EXISTS logging_event_exception;
  13. DROP TABLE IF EXISTS logging_event;
  14. COMMIT;
  15. BEGIN;
  16. CREATE TABLE logging_event
  17. (
  18. timestmp BIGINT NOT NULL,
  19. formatted_message TEXT NOT NULL,
  20. logger_name VARCHAR(254) NOT NULL,
  21. level_string VARCHAR(254) NOT NULL,
  22. thread_name VARCHAR(254),
  23. reference_flag SMALLINT,
  24. arg0 VARCHAR(254),
  25. arg1 VARCHAR(254),
  26. arg2 VARCHAR(254),
  27. arg3 VARCHAR(254),
  28. caller_filename VARCHAR(254) NOT NULL,
  29. caller_class VARCHAR(254) NOT NULL,
  30. caller_method VARCHAR(254) NOT NULL,
  31. caller_line CHAR(4) NOT NULL,
  32. event_id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY
  33. );
  34. COMMIT;
  35. BEGIN;
  36. CREATE TABLE logging_event_property
  37. (
  38. event_id BIGINT NOT NULL,
  39. mapped_key VARCHAR(254) NOT NULL,
  40. mapped_value TEXT,
  41. PRIMARY KEY(event_id, mapped_key),
  42. FOREIGN KEY (event_id) REFERENCES logging_event(event_id)
  43. );
  44. COMMIT;
  45. BEGIN;
  46. CREATE TABLE logging_event_exception
  47. (
  48. event_id BIGINT NOT NULL,
  49. i SMALLINT NOT NULL,
  50. trace_line VARCHAR(254) NOT NULL,
  51. PRIMARY KEY(event_id, i),
  52. FOREIGN KEY (event_id) REFERENCES logging_event(event_id)
  53. );
  54. COMMIT;

3.其他

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

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

[xhtml] view plain copy

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

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

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

贴出我完整的logback.xml

[xhtml] view plain copy

  1. <?**xml version=”1.0” encoding=”UTF-8”?>**
  2. <**configuration**>
  3. <**appender name=”ROLLING” class=”ch.qos.logback.core.rolling.RollingFileAppender”>**
  4. <**file**>E:/logs/mylog.txt</**file**>
  5. <**rollingPolicy class=”ch.qos.logback.core.rolling.TimeBasedRollingPolicy”>**
  6. <**fileNamePattern**>E:/logs/mylog-%d{yyyy-MM-dd_HH-mm}.%i.log</**fileNamePattern**>
  7. <**maxHistory**>5</**maxHistory**>
  8. <**timeBasedFileNamingAndTriggeringPolicy**
  9. class=”ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP”>
  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**>
  17. <**appender name=”STDOUT” class=”ch.qos.logback.core.ConsoleAppender”>**
  18. <**encoder**>
  19. <**pattern**>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</**pattern**>
  20. </**encoder**>
  21. </**appender**>
  22. <**appender name=”DB” class=”ch.qos.logback.classic.db.DBAppender”>**
  23. <**connectionSource class=”ch.qos.logback.core.db.DriverManagerConnectionSource”>**
  24. <**dataSource**
  25. class=”com.mchange.v2.c3p0.ComboPooledDataSource”>
  26. <**driverClass**>com.mysql.jdbc.Driver</**driverClass**>
  27. <**url**>jdbc:mysql://127.0.0.1:3306/tunneldb</**url**>
  28. <**user**>root</**user**>
  29. <**password**>123123</**password**>
  30. </**dataSource**>
  31. </**connectionSource**>
  32. </**appender**>
  33. <**logger name=”com.ttt.ttt” level=”DEBUG”>**
  34. <**appender-ref ref=”STDOUT” />**
  35. </**logger**>
  36. <**logger name=”java.sql.Connection” level=”DEBUG”><appender-ref ref=”STDOUT” /></logger**>
  37. <!— 打印sql
  38. <**logger name=”java.sql.Statement” level=”DEBUG”><appender-ref ref=”STDOUT” /></logger**>
  39. <**logger name=”java.sql.PreparedStatement” level=”DEBUG”><appender-ref ref=”STDOUT” /></logger**>
  40. <**logger name=”java.sql.ResultSet” level=”DEBUG”><appender-ref ref=”STDOUT” /></logger**>
  41. >
  42. <**root level=”DEBUG”><appender-ref ref=”ROLLING” /></root**>
  43. </**configuration**>

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

发表评论

表情:
评论列表 (有 0 条评论,390人围观)

还没有评论,来说两句吧...

相关阅读

    相关 logback

    没有使用logback,只使用了Simple Logging Facade for Java (SLF4J) Java的简单日志记录外观(SLF4J)可作为各种日志记录框架