springmvc 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的基本结构如下:
[xhtml] view plain copy
- <?**xml version=”1.0” encoding=”UTF-8”?>**
- <**configuration**>
- <**appender name=”STDOUT” class=”ch.qos.logback.core.ConsoleAppender”>**
- <**encoder**>
- <**pattern**>%d{yyyy-MM-dd HH
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关联前面指定顶的日志输出方式。
{此处插入一下日志级别的介绍哈:
它们定义了日志显示的级别,一共分为五个级别:DEBUG、INFO、WARN、ERROR和FATAL。这五个级别是有顺序的,DEBUG < INFO < WARN < ERROR < FATAL,明白这一点很重要,这里Log4j有一个规则:假设设置了级别为P,如果发生了一个级别Q比P高,则可以启动,否则屏蔽掉。如果
例子中的appender使用的是ch.qos.logback.core.ConsoleAppender类,用于对控制台进行日志输出
其中encoder标签指定日志输出格式为“时间 线程 级别 类路径 信息”
logback的文件日志输出方式还提供多种日志分包策略
1.文件日志
[xhtml] view plain copy
- <**appender name=”ROLLING” class=”ch.qos.logback.core.rolling.RollingFileAppender”>**
- <**file**>E:/logs/mylog.txt</**file**>
- <**rollingPolicy class=”ch.qos.logback.core.rolling.TimeBasedRollingPolicy”>**
- <**fileNamePattern**>E:/logs/mylog-%d{yyyy-MM-dd_HH-mm}.%i.log</**fileNamePattern**>
- <**maxHistory**>5</**maxHistory**>
- <**timeBasedFileNamingAndTriggeringPolicy**
- class=”ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP”>
- <**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类,它的基本属性包括
2.数据库日志
[xhtml] view plain copy
- <**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.<**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>**
- <**url**>jdbc
//127.0.0.1:3306/databaseName</**url**>
- <**user**>root</**user**>
- <**password**>root</**password**>
- </**dataSource**>
- </**connectionSource**>
- </**appender**>
数据库输出使用ch.qos.logback.classic.db.DBAppender类,数据源支持c3p0数据连接池,例子中使用的MySql,其他配置方式请参考官方文档。
使用数据库输出需要在数据库中建立3个表,建表脚本如下
[xhtml] view plain copy
- # Logback: the reliable, generic, fast and flexible logging framework.
- # Copyright (C) 1999-2010, QOS.ch. All rights reserved.
- #
- # See http://logback.qos.ch/license.html for the applicable licensing
- # conditions.
- # This SQL script creates the required tables by ch.qos.logback.classic.db.DBAppender.
- #
- # It is intended for MySQL databases. It has been tested on MySQL 5.1.37
- # on <**a href=”http://lib.csdn.net/base/linux“ class=’replace_word’ title=”Linux知识库” target=’_blank’ style=’color:#df3434; font-weight:bold;’>Linux</a>**
- BEGIN;
- DROP TABLE IF EXISTS logging_event_property;
- DROP TABLE IF EXISTS logging_event_exception;
- DROP TABLE IF EXISTS logging_event;
- COMMIT;
- BEGIN;
- CREATE TABLE logging_event
- (
- timestmp BIGINT NOT NULL,
- formatted_message TEXT NOT NULL,
- logger_name VARCHAR(254) NOT NULL,
- level_string VARCHAR(254) NOT NULL,
- thread_name VARCHAR(254),
- reference_flag SMALLINT,
- arg0 VARCHAR(254),
- arg1 VARCHAR(254),
- arg2 VARCHAR(254),
- arg3 VARCHAR(254),
- caller_filename VARCHAR(254) NOT NULL,
- caller_class VARCHAR(254) NOT NULL,
- caller_method VARCHAR(254) NOT NULL,
- caller_line CHAR(4) NOT NULL,
- event_id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY
- );
- COMMIT;
- BEGIN;
- CREATE TABLE logging_event_property
- (
- event_id BIGINT NOT NULL,
- mapped_key VARCHAR(254) NOT NULL,
- mapped_value TEXT,
- PRIMARY KEY(event_id, mapped_key),
- FOREIGN KEY (event_id) REFERENCES logging_event(event_id)
- );
- COMMIT;
- BEGIN;
- CREATE TABLE logging_event_exception
- (
- event_id BIGINT NOT NULL,
- i SMALLINT NOT NULL,
- trace_line VARCHAR(254) NOT NULL,
- PRIMARY KEY(event_id, i),
- FOREIGN KEY (event_id) REFERENCES logging_event(event_id)
- );
- COMMIT;
3.其他
此外logback还提供基于mail,基于jmx等多种日志输出方式,你也可以通过继承ch.qos.logback.core.AppenderBase
自己写appender实现
除了使用默认的日志主线程
[xhtml] view plain copy
- <**logger name=”com.test” level=”DEBUG”>**
- <**appender-ref ref=”STDOUT” />**
- </**logger**>
其中name指定线程针对的包路径,level是日志级别,
例如要实现打印jdbc提交的sql,可以加入如下logger:
贴出我完整的logback.xml
[xhtml] view plain copy
- <?**xml version=”1.0” encoding=”UTF-8”?>**
- <**configuration**>
- <**appender name=”ROLLING” class=”ch.qos.logback.core.rolling.RollingFileAppender”>**
- <**file**>E:/logs/mylog.txt</**file**>
- <**rollingPolicy class=”ch.qos.logback.core.rolling.TimeBasedRollingPolicy”>**
- <**fileNamePattern**>E:/logs/mylog-%d{yyyy-MM-dd_HH-mm}.%i.log</**fileNamePattern**>
- <**maxHistory**>5</**maxHistory**>
- <**timeBasedFileNamingAndTriggeringPolicy**
- class=”ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP”>
- <**maxFileSize**>100MB</**maxFileSize**>
- </**timeBasedFileNamingAndTriggeringPolicy**>
- </**rollingPolicy**>
- <**encoder**>
- <**pattern**>%date %level [%thread] %logger{36} [%file : %line] %msg%n</**pattern**>
- </**encoder**>
- </**appender**>
- <**appender name=”STDOUT” class=”ch.qos.logback.core.ConsoleAppender”>**
- <**encoder**>
- <**pattern**>%d{yyyy-MM-dd HH
ss.SSS} [%thread] %-5level %logger{36} - %msg%n</**pattern**>
- </**encoder**>
- </**appender**>
- <**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
//127.0.0.1:3306/tunneldb</**url**>
- <**user**>root</**user**>
- <**password**>123123</**password**>
- </**dataSource**>
- </**connectionSource**>
- </**appender**>
- <**logger name=”com.ttt.ttt” level=”DEBUG”>**
- <**appender-ref ref=”STDOUT” />**
- </**logger**>
- <**logger name=”java.sql.Connection” level=”DEBUG”><appender-ref ref=”STDOUT” /></logger**>
- <!— 打印sql
- <**logger name=”java.sql.Statement” level=”DEBUG”><appender-ref ref=”STDOUT” /></logger**>
- <**logger name=”java.sql.PreparedStatement” level=”DEBUG”><appender-ref ref=”STDOUT” /></logger**>
- <**logger name=”java.sql.ResultSet” level=”DEBUG”><appender-ref ref=”STDOUT” /></logger**>
- —>
- <**root level=”DEBUG”><appender-ref ref=”ROLLING” /></root**>
- </**configuration**>
总结:logback提供了丰富而高效的日志输出方式,并通过滚动策略,将实施时复杂的备份策略整合,极大的简化的部署成本,有兴趣的朋友可已考虑放到自己的项目里.官方提供了几百页的文档,内容相当详细,更多的内容请参照官方文档。
还没有评论,来说两句吧...