logback配置

  • Post author:
  • Post category:其他



原文地址


(1)appender

1.appender标签是logback配置文件中重要的组件之一。在logback配置文件中使用appender标签进行定义。可 以包含0个或多个appender标签。

2.appender主要作用就是:①控制打印日志的地方、②打印日志的输出格式。

3.appender语法结构:

1)属性:appender标签中包含两个强制需要的属性:①name、②class

①name:为这个appender起一个唯一标识的名称。与appender-ref中的值相对应。以引用appender。

②class:一个Appender类实例的完整类名称。

2)appender标签中可以包含0个或者1个【layout】标签。0个或者多个【encoder】标签,0个或者多个 【filter】标签。

3)除了上面3个公共标签之外,还可以包含任意多个与appender的class属性所在的类中的对应的属性标 签。准确的说是setXXX()的XXX标签。他就是利用了Java的反射机制。例如:

myApp.log

%date %level [%thread] %logger{10} [%file:%line] %msg%n

在ch.qos.logback.core.FIleAppender类中有一个setFile(String file)的方法,所以就可以appender有任意数 量的标签

4)下面图片展示了公共结构,注意没有支持的属性标签:

这里写图片描述

5)其中layout标签有一个强制的属性名称为class,他的值为layout类对象实例的完整类名称。与 appender标签一样,layout标签可以包含layout class对应实例的属性标签(setXXX中的XXX标签)。

如果你的layout标签中class属性的值想为ch.qos.logback.classic.PatternLayout类的话,你可以选择不写, 因为有默认值会自动填入到class属性值中。

6)encoder标签有一个强制的属性名称为class,他的值为encoder类对象实例的完整类名称。

如果你的encoder标签中class属性的值想为ch.qos.logback.classic.encoder.PatternLayoutEncoder 的类的话,你可以选择不写,因为有默认值会自动填入到class属相值中。

7)默认值图标如下:

这里写图片描述

4.要想记录多个日志信息格式是很简单的,那就定义多个appender标签,然后将他们关联到一个logger上去。例 如:


myApp.log

<encoder>
  <pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
</encoder>

%msg%n

这个配置文件中定义两个appender标签,名称分别为FILE和STDOUT,其中FILE的appender将日志记录到 名字叫myApp.log日志中。这个encoder的实例为PatternLayoutEncoder。其中格式为标签中的格 式样式。

两个appender标签都是与root元素通过【appender-ref】相关联的。

★★注意:每一个appender标签都有自己的encoder,encoder不能被多个appender所共享的。对于layout 也是一样的。所以在logback配置文件中没有任何语法提供让encoder或者layout可以被共享。

二、appender相关概念:

1.appender的累加(叠加):相关内容请看:logback和slf4j的使用之Logger使用:activity属性描述。

2.几个常用appender实例:

2.1.ConsoleAppender:

就想他的名字一样,将日志信息打印到控制台上,更加准确的说:使用System.out或者System.err方式输 出。

使用encoder标签设置输出的格式。

主要子标签有:

2.1.1encoder:设置打印日志信息的格式

2.1.2target:【String】设置一System.out还是System.err方式输出。默认值为System.out

2.2.FileAppender:

2.2.1.用于将日志信息输出到文件中。他有一个重要的标签:file标签。用于指定输出日志所在的文件。如果 日志不存在就会创建,如果存在,就会以【附加】或者【截断】的方式写入

2.2.2.主要的标签有:

append:【boolean】默认值为【true】。如果为true的话,就会以【附加】的方式写入到文件。

如果值为false。就会截断方式写入。

encoder:设置日志输出的格式信息

file:保存文件的路径。要注意【\】反斜杠的问题。如果你想要保存到【c:\temp\test.log】,你肯定不 想解释为【\t】为一个整体把。正确的做法是使用【c:/temp/test.log】或者【 c:\temp\test.log】两个中 的一个。

2.2.3独一无二的文件名称:

在应用开发或者短时间的项目中,一次运行项目都想创建一个新的日志文件信息,使用 标签可以很容易实现这个功能

例如:

log-${bySecond}.txt

%logger{35} – %msg%n

2.3.RollingFileAppender

从名字我们就可以得出:FileAppender是RollingFileAppender的父类。即RollingFileAppender继承 FIleAppender类。功能:能够动态的创建一个文件。也就是说:到满足一定的条件,就会创建一个新的文 件,然后将日志写入到新的文件中。

2.3.1.有两个重要的标签与rolingFileAppender进行交互:

2.3.1.1.RollingPolicy:

2.3.1.2.TriggeringPolicy

注意:为了使用RollingFileAppender必须有RollingPolicy和triggerPolicy。但是如果RoolingFileAppender中 的RoolingPolicy同时也实现了TriggerPolicy接口的话,那么只要这一个模型就可以了。

2.3.2.RollingFileAppender的标签:

2.3.2.1 file:与FileAppender一样。只能是确定的名称,不能改变。

2.3.2.2 append:与FileAppender一样,用于附加还是截断

2.3.2.3 encoder:设置输出日志的格式,与FIleAppender一样

2.3.2.4 rollingPolicy:当转换文件时,他会告诉RollingFileAppender

2.3.2.5 triggerPolicy.

2.3.3一个重要的RollingPolicy:(TimeBaseRollingPolicy)

这个TimeBaseRollingPolicy可能是最常用的rolling policy。

他的转换文件名是依赖时间,例如可以设置天,或者月

TimeBaseRollingPolicy实现了RollingPolicy接口,又实现了TriggerPolicy接口。

2.3.3.1TimeBaseRollingPolicy有一个强制的标签和几个可选的标签:

2.3.3.1.1 fileNamePattern:这是一个强制的标签。他的值可以包含:文件的名称、适当的%d转 换说明符。这个%d说明符可以包含一个【日期和时间】的模式。其中【模式】类似于 【SimpleDateFormat】类。如果这个【模式】没有写的话,默认就是【yyyy-MM-dd】的模式。 转换文件的名称从fileNamePattern中得到

注意:在RollingFileAppender中有一个file标签,也是设置文件的名称的。file可以设置 也可以不设置。如果你设置了file标签的话,他就不会转换到新的文件中。所有的日志 信息将会输入到同一个文件中。如果file标签没有设置。文件的名称就会在每一个阶段 由filenamePattern计算得出。

其中【日期和时间】格式的形式;【%d{格式}】。注意:在fileNamePattern中无论是斜杠【/】 还是反斜杠【\】在fileNamePattern的任何位置或者在【日期时间】模式里面都作为文件分隔符。

在fileNamePattern中可以有多个%d的说明符,但是只能有一个主的%d说明付。其他的%d说明 符必须使用【aux】说明是从说明符。

2.3.3.1.2maxHistory:这是一个可选的标签。用于控制文件保持的最大时间。异步的删除删除旧 的文件。时间单位是月。如果你设置为6的话,那就是保持文件的时间是6个月。超过6个月的文 件将会被删除。

2.3.3.1.3totalSizeCap:这是所有日志文件的总大小空间。当日志文件的空间超过了设置的最大 空间数量,就会删除旧的文件。注意:这个标签必须和maxHistory标签一起使用。

2.3.4看看下面的例子

这里写图片描述

2.3.5一个RollingFileAppender的完整例子:

logFile.log

logFile.%d{yyyy-MM-dd}.log

  <!-- keep 30 days' worth of history capped at 3GB total size -->
  <maxHistory>30</maxHistory>
  <totalSizeCap>3GB</totalSizeCap>

</rollingPolicy>

<encoder>
  <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>

(2)logger

一、logger标签描述:(了解logger标签之前先看看两个重要概念)

1.主要概念:★★级别继承(level inheritance)

1)root标签是所有logger的祖先元素,所有的logger都继承与root元素,相当于java中的object对象。

2)每一个logger标签都可以指定一个级别(TRACE,DEBUG,INFO,WARN,ERROR五种,他们是在ch.qos.logback.classic.Levelclass中定义的)。

3)如果一个指定的logger标签没有指定规则的话,就会继承离他最近的祖先的级别。

4)因为所有的logger都是继承root标签,所以为了确保所有的logger都有一个级别,root标签有一个默认的级别,默认值为DEBUG

5)看看下面四个例子:

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

2.重要概念:★★基本选择规则(base selection rule):

1)任何一个logger对象都有五种级别,所以就对应有五种打印日志方法:logger.info(字符串),logger.debug(字符串)

2)如果使用logger.info(字符串)的话,那么logger打印级别就是INFO。

3)看看一个logger能不能打印出日志主要看两个因素:①打印方法时使用的级别(logger.info()),②logger对象的有效级别。第一个

重要概念所讲。

4)如何判断是否打印出日志:规则如下:

A log request of level p issued to a logger having an effective level q, is enabled if p >= q.

一个logger打印级别为P,而他的有效级别为q。如果p>=q的话,p对应的信息能打印出来。否则就不能打印出对应的信息。

记住:有效级别是最低级别,高于有效级别的信息都能打印出来,低于有效级别都不能打印出来。

5)级别大小规则:TRACE