博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Logback手记
阅读量:7224 次
发布时间:2019-06-29

本文共 7694 字,大约阅读时间需要 25 分钟。

hot3.png

1、什么是logback

  logback的产生是作为著名的日志框架log4j项目的一个继承者。它的设计者正是log4j的创造者Ceki Gülcü。logback在很大幅度上比现有的日志系统拥有更快的速度和更小的体积。logback也提供了独特和一些有用的特性,譬如标记、参数化的日志语句、有条件的堆栈跟踪和强大的事件过滤机制。这些只是运用logback提供的特性的一些例子。对于它自己的错误报表,logback依赖于状态对象,这样很大程度上促进了故障的排除。你可能更希望在日志之外依赖于状态对象。logback的核心绑定joran,一个强大和通用的配置系统,能在你自己的项目中起到很大的影响。

2、配置

2.1、所需jar包

logback-classic-1.0.0.jar

logback-core-1.0.0.jar

slf4j-api-1.6.4.jar

maven的依赖为:

org.slf4j
slf4j-api
1.7.12
org.slf4j
jcl-over-slf4j
1.7.12
ch.qos.logback
logback-core
1.1.3
ch.qos.logback
logback-classic
1.1.3

logback jar下载地址:

slf4j jar下载地址:

 

2.2、配置文件

logback可以有以下三种配置文件:

Ø  logback.groovy

Ø  logback-test.xml

Ø  logback.xml

logback加载时也是按以上顺序进行加载的。

 logback会依次读取以下类型配置文件:logback.groovy,logback-test.xml,logback.xml(如果均不存在会采用默认配置)

logback.xml样例如下:

   
     
       
         
%d{yyyy/MM/dd-HH:mm:ss.SSS} %level [%thread] %class:%line>>%msg%n
                    
       
        

可以在中添加以下语句查看logback内部状态:

LoggerContextlc = (LoggerContext) LoggerFactory.getILoggerFactory(); StatusPrinter.print(lc);

 如果你没有配置文件,会在控制台上输出以下语句:

11:19:06,828|-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource[logback.groovy] 11:19:06,828|-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT findresource [logback-test.xml] 11:19:06,828|-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT findresource [logback.xml] 11:19:06,828|-INFO in ch.qos.logback.classic.LoggerContext[default] - Setting up defaultconfiguration.

 2.3、简单应用

Loggerlogger = LoggerFactory.getLogger(“loggerOne”); //获取logger对象实例

logger.debug("Hellologback debug.");   //logger对象以debug级别输出调试语句

以上代码语句就生成了一个logger实例,命名为”loggerOne”,也就是说“loggerOne”就是这个logger的名称。

 

如果在代码中添加如下语句:

Logger logger1 =LoggerFactory.getLogger(“loggerOne”);

Logger logger2 =LoggerFactory.getLogger(“loggerOne”);

则代表logger1和logger2是两个相同的对象实例。所以在logback中只要logger的名称相同,那就代表是相同的对象实例。

2.4、logger命名

 logger的命名是大小写敏感的,logger的命名一般都是取“类名.class”,这样命名在日志输出中也可看出其来源。

代码:

Logger logger =LoggerFactory.getLogger(LogBackAction.class);

logger.debug("Hello logbackdebug.");

 

控制台输出:

11:57:07.375["http-apr-8080"-exec-8] DEBUG app.action.LogBackAction - Hello logbackdebug.

就可以看出其具体来源于哪个类

 

logger命名层次:

如果logger名称带上点号后是另一个logger的名称的前缀,则前者就被称为后者的祖先,如果logger与其后者logger之间没有其他祖先,则称前者为父logger,后者为子logger,相当于java中子类跟父类的概念。

例如:

  app.action    //父logger

  app.action.logbackaction  //子logger

2.5、logger有效级别

logback中一共有5种有效级别,分别是TRACE、DEBUG、INFO、WARN、ERROR,优先级依次从低到高,logger之间的级别也有继承关系,但这里就不阐述了。

 

3、配置文件语法规则

3.1、简单配置分析

logback的配置文件还是非常简单,它的根节点是<configuration>,其又包括0个或多个<appender>节点、0个和多个<logger>节点、至多一个<root>节点。如下图所示:

                                               图(1)

根节点<configuration>包含的属性:

 

scan:

当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。

scanPeriod:

设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。

debug:

当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。

例如:

      

如下代码所示是一个最简单的配置:

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

以上配置中定义了一个appender和一个root,appender可以理解为logback输出的目的地,root节点是根logger的意思,这里定义了根logger的输出就是控制台。

 

pattern节点中定义的是输出的模式规则:

%d{HH:mm:ss.SSS}:当前时间

[%thread]:线程名

%-5level:logger定义的级别

%logger{36}:logger名称

-%msg%n:定义的输出

 

如下代码:

Loggerlogger = LoggerFactory.getLogger(LogBackAction.class);

logger.debug("Hellologback debug.");

输出:

13:13:51.625["http-apr-8080"-exec-6] DEBUG app.action.LogBackAction - Hellologback debug.

3.2、控制输出级别

logback日志级别一共有5种,可以通过配置文件输出指定级别的日志信息。

在以上配置文件中添加如下代码:

<loggername="app.action.LogBackAction" level="INFO"/>

表示命名为“app.action.LogBackAction”的logger只输出info级别的日志信息。

3.3、配置appender

appender可以包含0过或多个layout节点,0个或多个encoder节点,0个或多个filter节点,如下图所示:

                                                                               图(2)

输出到文件的appender,配置如下:

   
myApp.log
   
   
%d{yyyy-MM-dd HH:mm:ss} -%msg%n  
   

如上配置后日志信息将写入到myApp.log文件中,默认情况下logback会将日志信息追加到日志文件中,如果在appender中加入<appender>false</appender>则会替换之前的日志信息。

 

logback配置文件中还可以设置时间戳,这样的话就可以将日志信息输出到日期的指定文件中,如下配置:

<!--时间戳格式设置为yyyy-MM-dd-->

<timestampkey="byDay" datePattern="yyyy-MM-dd"/>

 

appender配置如下:

   
myApp_${byDay}.log
   
   
%d{yyyy-MM-dd HH:mm:ss} -%msg%n  
   
 

以上配置日志信息就会写入一个“myApp”+ “yyyy-MM-dd”的文件中.

 

以上appender中使用到的类是FileAppdener,也就是基本的文件输出,logback中还有RollingFileAppender继承FileAppender,能够滚动记录文件。如果想用RollingFileAppender则需要配置RollingPolicy和TriggerPolicy,分别表示滚动策略和触发策略。

这里说下RollingFileAppender,滚动,滚动的意思就是根据规则,只会保留制定大小或者日期的日志文件,满足了触发策略,以前的数据就会被新数据替代。

示例如下:

test.log
  
test.%i.log
  
1
  
3
  
5MB
  
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n

以上代码配置了RollingFileAppender,rollingPolicy定义为FixedWindwoRollingPolicy,这个滚动策略表示当满足了一定的触发策略后,logback会将日志信息写入到其他的日志文件中。配置了FixedWindowRollingPolicy后需要配置以下节点信息:

<fileNamePattern>:表示当触发了回滚策略后,按这个文件命名规则生成归档文件,命名规则中的%i表示在maxIndex和minIndex之间的一个整数值。

<minIndex>:最小索引值

<maxIndex>:最大索引值

假设生成三个日志归档文件,test.1.log、test.2.log、test.3.log,则test.1.log文件代表最先写入的那个文件,当三个文件都写满后会先删除test.3.log文件,test.1.log、test.2.log文件更名为test.2.log、test.3.log文件,然后建立一个test.1.log文件进行写入,满足条件就执行这个循环。

 

logback中还有基于时间的rollingPolicy,配置如下:

 
/usr/heliLogs/fastdfs/info.log
/usr/heliLogs/fastdfs/info.%d{yyyy-MM-dd}.log
30
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg%n
INFO
ACCEPT
DENY
/usr/heliLogs/fastdfs/error.log
/usr/heliLogs/fastdfs/error.%d{yyyy-MM-dd}.log
30
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg%n
ERROR
ACCEPT
DENY

以上配置的保存30天文件,将info日志和error日志分别写入文件,只保留30天记录,日志信息则写入新的文件中。

<filter>:

过滤器,执行一个过滤器会有返回个枚举值,即DENY,NEUTRAL,ACCEPT其中之一。返回DENY,日志将立即被抛弃不再经过其他过滤器;返回NEUTRAL,有序列表里的下个过滤器过接着处理日志;返回ACCEPT,日志会被立即处理,不再经过剩余过滤器。

过滤器被添加到<Appender> 中,为<Appender> 添加一个或多个过滤器后,可以用任意条件对日志进行过滤。<Appender> 有多个过滤器时,按照配置顺序执行。

 

下面是几个常用的过滤器:

 

LevelFilter: 级别过滤器,根据日志级别进行过滤。如果日志级别等于配置级别,过滤器会根据onMath 和 onMismatch接收或拒绝日志。有以下子节点:

<level>:设置过滤级别

<onMatch>:用于配置符合过滤条件的操作

<onMismatch>:用于配置不符合过滤条件的操作

 <prudent>:如果是 true,日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写入操作,效率低,默认是 false。

有时当你在按照日期进行归档时还想对日志文件大小进行限制,可以使用logback中的SizeAndTimeBasedFNATP,它是TimeBasedRollingPolicy的子组件,FNATP代表“文件命名和触发策略”。

配置如下:

    
mylog.txt
    
      
      
mylog-%d{yyyy-MM-dd}.%i.txt
      
        
        
100MB
      
         
      
%msg%n
    
  

以上配置表示媒体的日志文件不能超过100MB,一旦超过就要归档。

 

logback还有很多的高级特性,但以上介绍可以满足一般系统对日志的需求。

                                      

转载于:https://my.oschina.net/ydsakyclguozi/blog/412259

你可能感兴趣的文章
android.os.NetworkOnMainThreadException的解决方案
查看>>
16、SpringBoot-CRUD错误处理机制(3)
查看>>
Selenium 安装与配置及webdriver的API与定位元素
查看>>
git 覆盖本地变化
查看>>
Java中的内存分配机制
查看>>
找回Gnome菜单下的关机键
查看>>
[转载] 中华典故故事(孙刚)——07 二百五
查看>>
[转载] 中华典故故事(孙刚)——09 挂羊头_卖狗肉
查看>>
GitKraken使用教程-基础部分(2)
查看>>
PHP设计模式 -- 注册模式
查看>>
iframe和DataForm
查看>>
CQOI2019(十二省联考)游记
查看>>
【总结整理】需求分析所需掌握技能(转)
查看>>
我的软件之路
查看>>
EL表达式
查看>>
日期(date)运用座谈会
查看>>
能率燃气热水器售后好差啊!
查看>>
python常见问题
查看>>
图论精炼500题
查看>>
ubuntu误删home目录
查看>>