logback.xml经常使用配置详解

Logback最经常使用就是在/src/main/resource/文件夹下的logback.xml文件中。,从而对日志进行配置输出。
logback主要包含三个组成部分:Loggers(日志记录器)Appenders(输出目的在)Layouts(日志输出格式)java

下面就是一个经常使用的日志配置模版,下面就从跟节点来解析每一个节点spring

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="true" scanPeriod="1 seconds">

    <contextName>logback</contextName>

    <property name="log.path" value="F:\\logback.log" />

    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <!-- <filter class="com.example.logback.filter.MyFilter" /> -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
              <level>ERROR</level>
        </filter>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n
            </pattern>
        </encoder>
    </appender>

    <appender name="file"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}.%d{yyyy-MM-dd}.zip</fileNamePattern>
        </rollingPolicy>

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

    <root level="debug">
        <appender-ref ref="console" />
        <appender-ref ref="file" />
    </root>

    <logger name="com.example.logback" level="warn" />

</configuration>

一、根节点configuration,有如下属性app

  • scan,当此属性设置为true时,配置文件若是发生改变,将会被从新加载,默认值为true。ide

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

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

二、contextName ,设置日志上下文名称,能够经过%contextName来打印日志上下文名称线程

三、property能够用来设置变量,能够经过${name}来访问,有如下的属性debug

  • name,用于${name}访问的key日志

  • value,用于${name}访问的valuecode

  • file ,用于指定配置文件的路径,他的做用在于,若是你有多个配置信息的话,能够直接写在配置文件中,而后经过file引入

<property file="src/main/java/chapters/configuration/variables.properties" />

variables.properties以下

log.path=F:\\demo
log.name=mylog.log

而后就直接经过${log.path}就能够访问其值

  • resource做用和file同样,可是,它是能够直接从classpath路径下引入配置文件
<property resource="resource.properties" />

四、appender格式化日志输出节点,有俩个属性name和class,class用来指定哪一种输出策略,经常使用就是控制台输出策略和文件输出策略。appender有如下子节点:

  • filter,日志输出拦截器,能够自定义拦截器也能够用系统一些定义好的拦截器
/**
* 日志输出拦截器
* @author liuxg
* @date 2016年4月28日 下午3:36:23
*/
public class MyFilter extends Filter<ILoggingEvent> {

@Override
public FilterReply decide(ILoggingEvent event) {

    if (event.getMessage().contains("sample")) {
        return FilterReply.ACCEPT; //容许输入串
    } else {
        return FilterReply.DENY; //不容许输出
    }
}
}

它能够提供最大的自定义输出,若是须要用到系统定义的拦截器,例如咱们用ThresholdFilter来过滤掉ERROR级别如下的日志不输出到文件中

<filter  class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
  • encoder和pattern节点组合用于具体输出的日志格式

  • file节点用来指明日志文件的输出位置,能够是绝对路径也能够是相对路径

  • rollingPolicy日志回滚策略,在这里咱们用了TimeBasedRollingPolicy,基于时间的回滚策略,有如下子节点

fileNamePattern,必要节点,能够用来设置指定时间的日志归档,例如咱们上面的例子是天天将日志归档成一个zip包
maxHistory ,可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件,,例如设置为30的话,则30天以后,旧的日志就会被删除
totalSizeCap,可选节点,用来指定日志文件的上限大小,例如设置为3GB的话,那么到了这个值,就会删除旧的日志

除了用TimeBasedRollingPolicy策略,咱们还能够用SizeAndTimeBasedRollingPolicy,配置子节点的maxFileSize来指定单个日志文件的大小

<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>mylog.txt</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  <!-- 天天一归档 -->
  <fileNamePattern>mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
   <!-- 单个日志文件最多 100MB, 60天的日志周期,最大不能超过20GB -->
   <maxFileSize>100MB</maxFileSize>    
   <maxHistory>60</maxHistory>
   <totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
<encoder>
  <pattern>%msg%n</pattern>
</encoder>
</appender>

五、root节点,必选节点,用来指定最基础的日志输出级别,他有俩个本身点能够用来应用appender,格式化日志输出

<root level="debug">
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>

六、logger节点,可选节点,用来具体指明包的日志输出级别,它将会覆盖root的输出级别

<!-- name 属性表示匹配的logger类型前缀 -->  
<logger name="com.taobao.jingwei.monitor">  
    <level value="WARN" />  
    <!-- 引用的appender,相似于spring的ref -->  
    <appender-ref ref="MONITOR" />  
</logger>

logger中有一个additivity属性,做用在于 children-logger是否使用 rootLogger配置的appender进行输出。
false:表示只用当前logger的appender-ref。
true:表示当前logger的appender-ref和rootLogger的appender-ref都有效。
这样logger名字匹配com.taobao.jingwei.monitor的信息就只在MONITOR的appender输出,而不会在root logger中输出了

七、特殊符号

%logger{36} 表示logger名字最长36个字符,不然按照句点分割。
logger{length}输出日志的logger名,可有一个整形参数,功能是缩短logger名,设置为0表示只输入logger最右边。

Conversion specifier Logger name Result
%logger mainPackage.sub.sample.Bar mainPackage.sub.sample.Bar
%logger{0} mainPackage.sub.sample.Bar Bar
%logger{5} mainPackage.sub.sample.Bar m.s.s.Bar
%logger{10} mainPackage.sub.sample.Bar m.s.s.Bar
%logger{15} mainPackage.sub.sample.Bar m.s.sample.Bar
%logger{16} mainPackage.sub.sample.Bar m.sub.sample.Bar
%logger{26} mainPackage.sub.sample.Bar mainPackage.sub.sample.Bar

%d{HH:mm:ss.SSS}输出日志的打印日志,模式语法与java.text.SimpleDateFormat 兼容。看上去%d就已经够好了

Conversion Pattern Result
%d 2006-10-20 14:06:49,812
%date 2006-10-20 14:06:49,812
%date{ISO8601} 2006-10-20 14:06:49,812

%msg%n 其中msg表示打印输出的消息, %n表示换行
m / msg / message 输出应用程序提供的信息。
可选的格式修饰符位于“%”和转换符之间。第一个可选修饰符是左对齐标志,符号是减号“-”;
接着是可选的最小宽度修饰符,用十进制数表示。若是字符小于最小宽度,则左填充或右填充,默认是左填充(即右对齐),填充符为空格。
若是字符大于最小宽度,字符永远不会被截断。

t / thread 输出产生日志的线程名。
p / le / level输出日志级别。

 

八、Level有效级别

Logger能够被分配级别。级别包括:TRACE、DEBUG、INFO、WARN和ERROR,定义于ch.qos.logback.classic.Level类。程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。若是设置级别为INFO,则优先级高于等于INFO级别(如:INFO、 WARN、ERROR)的日志信息将能够被输出,小于该级别的如DEBUG将不会被输出。为确保全部logger都可以最终继承一个级别,根logger老是有级别,默认状况下,这个级别是DEBUG。

参考文章

http://blog.csdn.net/arkblue/article/details/7772971
http://blog.csdn.net/yingxiake/article/details/51274426

相关文章
相关标签/搜索