SLF4J+LogBack总结.docx

上传人:b****8 文档编号:10824916 上传时间:2023-02-23 格式:DOCX 页数:14 大小:130.26KB
下载 相关 举报
SLF4J+LogBack总结.docx_第1页
第1页 / 共14页
SLF4J+LogBack总结.docx_第2页
第2页 / 共14页
SLF4J+LogBack总结.docx_第3页
第3页 / 共14页
SLF4J+LogBack总结.docx_第4页
第4页 / 共14页
SLF4J+LogBack总结.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

SLF4J+LogBack总结.docx

《SLF4J+LogBack总结.docx》由会员分享,可在线阅读,更多相关《SLF4J+LogBack总结.docx(14页珍藏版)》请在冰豆网上搜索。

SLF4J+LogBack总结.docx

SLF4J+LogBack总结

SLF4J+LogBack_学习总结

一,介绍

Slf4j:

简单日记门面(Facade)SLF4J是为各种logingAPIs提供一个简单统一的接口,从而使得最终用户能够在部署的时候配置自己希望的logingAPIs实现。

LoggingAPI实现既可以选择直接实现SLF4J接的logingAPIs如:

NLOG4J、SimpleLogger。

也可以通过SLF4J提供的API实现来开发相应的适配器如Log4jLoggerAdapter、JDK14LoggerAdapter。

Logback:

Logback是由log4j创始人设计的又一个开源日记组件。

logback当前分成三个模块:

logback-core,logback-classic和logback-access。

;logback-core是其它两个模块的基础模块。

logback-classic是log4j的一个改良版本。

此外logback-classic完整实现SLF4JAPI使你可以很方便地更换成其它日记系统如log4j或JDK14Logging。

logback-access访问模块与Servlet容器集成提供通过Http来访问日记的功能。

Log4j:

Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIXSyslog守护进程等;用户也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,用户能够更加细致地控制日志的生成过程。

这些可以通过一个配置文件来灵活地进行配置,而不需要修改程序代码。

slf4j是日志系统的前端接口,logback则是日志实现。

Slf4j的接口关系,如下图:

二,结构

基本结构:

三个jar包+一个xml配置文件

logback-classic-1.0.6.jar

logback-core-1.0.6.jar

slf4j-api-1.6.6.jar

logback.xml

三,使用

configuretion》appender(负责写日志的组件)》filter

root(root》loger)

loger(root也是loger元素)

appenderConsoleAppender(写入控制台)

FileAppender(写入文件中)

RollingFileAppender(rollingPolicy滚动策略:

TimeBasedRollingPolicyFixedWindowRollingPolicy;triggeringPolicy触发策略:

SizeBasedTriggeringPolicy)

filterLevelFilter(级别过滤器)包括:

ThresholdFilter(临界值过滤器)

EvaluatorFilter(求值过滤器)

四,注意

1,日志形式:

文件形式日志、控制台形式日志、数据库形式日志、JMS形式日志、mail形式日志。

日志可以使用不同的方式生成。

2,简洁的代码写法:

Log4j语句:

if(logger.isDebugEnabled()){ logger.debug("Userwithaccount"+user.getAccount()+"failedauthentication;"+"suppliedcryptedpassword"+user.crypt(password)+"doesnotmatch.");}

等价的LOGBack语句如下:

logger.debug("Userwithaccount{}failedauthentication;"+ "suppliedcryptedpassword{}doesnotmatch.",user.getAccount(),user.crypt(password));

3,过滤器:

过滤器,执行一个过滤器会有返回个枚举值:

即DENY,NEUTRAL,ACCEPT其中之一。

返回DENY,日志将立即被抛弃不再经过其他过滤器;

返回NEUTRAL,有序列表里的下个过滤器过接着处理日志;

返回ACCEPT,日志会被立即处理,不再经过剩余过滤器。

过滤器被添加到中,为添加一个或多个过滤器后,

可以用任意条件对日志进行过滤。

有多个过滤器时,按照配置顺序执行。

4,查找logback.xml文档的顺序:

5,Appender的内容:

6,Logback中各个节点之间的关系:

五,代码(各种logback.xml配置)

1,基本配置

代码:

xmlversion="1.0"encoding="UTF-8"?

>

   

     %d{yyyy-MM-ddHH:

mm:

ss.SSS}[%thread]%-5level%logger{36}-%msg%n

   

 

 

说明:

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

例子中的appender使用的是ch.qos.logback.core.ConsoleAppender类,用于对控制台进行日志输出,其中encoder标签指定日志输出格式为“时间线程级别类路径信息”logback的文件日志输出方式还提供多种日志分包策略。

2,文件日志配置

代码:

viewplaincopytoclipboardprint?

   E:

/logs/mylog.txt

   

     

--rolloverdaily-->

     E:

/logs/mylog-%d{yyyy-MM-dd_HH-mm}.%i.log

     5

     

           class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">

       

--orwheneverthefilesizereaches100MB-->

       100MB

     

   

   

     %date%level[%thread]%logger{36}[%file:

%line]%msg%n

   

 

说明:

文件日志输出采用的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两个文件。

3,数据库日志配置

代码:

   

      

       class="com.mchange.v2.c3p0.ComboPooledDataSource">

     com.mysql.jdbc.Driver

     jdbc:

mysql:

//127.0.0.1:

3306/databaseName

     root

     root

     

   

 

说明:

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

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

#Logback:

thereliable,generic,fastandflexibleloggingframework.

#Copyright(C)1999-2010,QOS.ch.Allrightsreserved.

#

#Seehttp:

//logback.qos.ch/license.htmlfortheapplicablelicensing

#conditions.

#ThisSQLscriptcreatestherequiredtablesbych.qos.logback.classic.db.DBAppender.

#

#ItisintendedforMySQLdatabases.IthasbeentestedonMySQL5.1.37

#onLinux

BEGIN;

DROPTABLEIFEXISTSlogging_event_property;

DROPTABLEIFEXISTSlogging_event_exception;

DROPTABLEIFEXISTSlogging_event;

COMMIT;

BEGIN;

CREATETABLElogging_event

 (

   timestmp        BIGINTNOTNULL,

   formatted_message TEXTNOTNULL,

   logger_name      VARCHAR(254)NOTNULL,

   level_string     VARCHAR(254)NOTNULL,

   thread_name      VARCHAR(254),

   reference_flag   SMALLINT,

   arg0             VARCHAR(254),

   arg1             VARCHAR(254),

   arg2             VARCHAR(254),

   arg3             VARCHAR(254),

   caller_filename  VARCHAR(254)NOTNULL,

   caller_class     VARCHAR(254)NOTNULL,

   caller_method    VARCHAR(254)NOTNULL,

   caller_line      CHAR(4)NOTNULL,

   event_id         BIGINTNOTNULLAUTO_INCREMENTPRIMARYKEY

 );

COMMIT;

BEGIN;

CREATETABLElogging_event_property

 (

   event_id      BIGINTNOTNULL,

   mapped_key       VARCHAR(254)NOTNULL,

   mapped_value     TEXT,

   PRIMARYKEY(event_id,mapped_key),

   FOREIGNKEY(event_id)REFERENCESlogging_event(event_id)

 );

COMMIT;

BEGIN;

CREATETABLElogging_event_exception

 (

   event_id        BIGINTNOTNULL,

   i               SMALLINTNOTNULL,

   trace_line      VARCHAR(254)NOTNULL,

   PRIMARYKEY(event_id,i),

   FOREIGNKEY(event_id)REFERENCESlogging_event(event_id)

 );

COMMIT;

4,其它日志配置

说明:

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

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

       

     

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

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

贴出我完整的logback.xml

xmlversion="1.0"encoding="UTF-8"?

>

 

--logoutputtofile -->

 

   E:

/logs/mylog.txt

   

     

--rolloverdaily-->

     E:

/logs/mylog-%d{yyyy-MM-dd_HH-mm}.%i.log

     5

     

           class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">

       

--orwheneverthefilesizereaches100MB-->

       100MB

     

   

   

     %date%level[%thread]%logger{36}[%file:

%line]%msg%n

   

 

--logoutputtoconsole -->

   

     %d{yyyy-MM-ddHH:

mm:

ss.SSS}[%thread]%-5level%logger{36}-%msg%n

   

 

-- logoutputtodb-->

   

      

       class="com.mchange.v2.c3p0.ComboPooledDataSource">

     com.mysql.jdbc.Driver

     jdbc:

mysql:

//127.0.0.1:

3306/tunneldb

     root

     123123

     

   

 

   

    

  

 

  

  

-- 打印sql

  

  

  

  

  -->

 

总结:

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

5,带说明的配置文件

代码:

xmlversion="1.0"encoding="UTF-8"?

>

--定义日志文件的存储地址勿在LogBack的配置中使用相对路径-->

/log"/>

--控制台输出-->

--日志输出编码-->

UTF-8

--格式化输出:

%d表示日期,%thread表示线程名,%-5level:

级别从左显示5个字符宽度%msg:

日志消息,%n是换行符-->

%d{yyyy-MM-ddHH:

mm:

ss.SSS}[%thread]%-5level%logger{50}-%msg%n

--按照每天生成日志文件-->

UTF

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1