Logback配置与使用

Logback配置与使用

Logback介绍

Logback主要由三个模块组成:

  1. logback-access:与Servlet容器集成,提供通过Http来访问日志的功能。第三方软件logback-access来访问Logback里面生成的日志。
  2. logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging。
  3. logback-core:为其他两个模块提供了基础的服务。

Logback的主要标签Logger、appender及layout:

  1. Logger:作为日志的记录器,把它关联到应用的对应的context上后,主要用于存放日志对象,也可以定义日志类型、级别。
  2. appender:主要用于指定日志输出的目的地,目的地可以是控制台、文件、远程套接字服务器、 MySQL、PostreSQL、 Oracle和其他数据库、 JMS和远程UNIX Syslog守护进程等。
  3. layout:格式化日志输出。

Logback配置

如果配置文件 logback-test.xml 和 logback.xml 都不存在,那么 logback 默认地会调用BasicConfigurator ,创建一个最小化配置,默认是在控制台里面输出日志。

logback.xml常用配置详解

  1. 根节点configuration包含三个属性:
    scan:默认为true。作用:当设置为true时,如果配置文件发生改变,将会被重新加载。

    scanPeriod:默认时间间隔为1分钟,默认单位是毫秒,当scan为true时,此属性生效。作用:检测配置文件是否有修改时间间隔。

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

    <configuration scan="true" scanPeriod="60 seconds" debug="false">
    	<!--其他配置省略-->
     </configuration>
    
  2. 子节点property:用来定义变量值,有两个属性name和value。
    通过property定义的值被插入到logger上下文中,可以使¥{}来使用变量。
    name:变量的名字
    value:变量名字对应的数值

    <property name="log.level" value="debug" />
        <property name="log.maxHistory" value="30" />
        <property name="log.filePath" value="${catalina.base}/logs/webapps" />
        <property name="log.pattern"
                  value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n" />
    
  3. 子节点appender:负责写日志的组件,有两个必要属性name和class。
    name:指定appender名称
    class:指定appender的全限定名

    • class=“ch.qos.logback.core.ConsoleAppender”:把日志输出到控制台,有以下子节点:
      encoder:对日志进行格式化。
      target:字符串System.out(默认)或者System.err。

    • class=“ch.qos.logback.core.FileAppender”:把日志添加到文件,有以下子节点:
      file:被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值。
      append:默认为true。如果是true,日志被追加到文件结尾,如果是false,清空现存文件。
      encoder:对记录事件进行格式化。
      prudent:默认为false。如果是true,日志会被安全的写入文件,即其他的FileAppender也在向此文件做写入操作,效率低。

    • class=“ch.qos.logback.core.rolling.RollingFileAppender”:滚动记录文件,先将日志文件指定到文件,当符合某个条件时,将日志记录到其他文件。有以下子节点:
      file:被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值。
      append:默认为true。如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件。
      rollingPolicy:当发生滚动时,决定RollingFileAppender的行为,涉及文件移动和重命名。属性class定义具体的滚动策略类。  
      triggeringPolicy : 告知 RollingFileAppender 合适激活滚动。
      encoder:对记录事件进行格式化。负责两件事:1)是把日志信息转换成字节数组,2)是把字节数组写入到输出流。
      filter:过滤日志。filter class=“ch.qos.logback.classic.filter.LevelFilter”。

      PatternLayoutEncoder 是唯一有用的且默认的encoder。有一个节点:
      pattern节点,用来设置日志的输入格式。使用“%”加“转换符”方式,如果要输出“%”,则必须用“\”对“%”进行转义。

    • 还有SocketAppender、SMTPAppender、DBAppender、SyslogAppender、SiftingAppender,并不常用,这里就不详解了。

  4. 子节点logger:用来设置某一个包或具体的某一个类的日志打印级别、以及指定appender
    name:用来指定受此logger约束的某一个包或者具体的某一个类。
    leve:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL和OFF,还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。 如果未设置此属性,那么当前logger将会继承上级的级别。
    addtivity:是否向上级logger传递打印信息。默认是true。同一样,可以包含零个或多个元素,标识这个appender将会添加到这个logger。

  5. 子节点root:它也是logger元素,但是它是根logger,是所有logger的上级。只有一个level属性,因为name已经被命名为"root",且已经是最上级了。有一个属性 level用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL和OFF,不能设置为INHERITED或者同义词NULL。 默认是DEBUG。

实例

logback.xml配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="true" scanPeriod="60 seconds" debug ="false">
    <!-- 定义参数常量  -->
    <!-- TRACE<DEBUG<INFO<WARN<ERROR  -->
    <!-- logger.trace("msg")  logger.debug("msg") ......-->
    <property name="log.level" value="debug" />
    <property name="log.maxHistory" value="30" />
    <property name="log.filePath" value="${catalina.base}/logs/webapps" />
    <property name="log.pattern"
              value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n" />

    <!-- 控制台设置 -->
    <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>
    <!-- DEBUG -->
    <appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 文件路径 -->
        <file>${log.filePath}/debug.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 文件名称 -->
            <fileNamePattern>${log.filePath}/debug/debug.%d{yyyy-MM-dd}.log.gz
            </fileNamePattern>
            <!-- 文件最大保存历史数量 -->
            <maxHistory>${log.maxHistory}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!-- INFO -->
    <appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 文件路径 -->
        <file>${log.filePath}/info.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 文件名称 -->
            <fileNamePattern>${log.filePath}/info/info.%d{yyyy-MM-dd}.log.gz
            </fileNamePattern>
            <!-- 文件最大保存历史数量 -->
            <maxHistory>${log.maxHistory}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!-- ERROR -->
    <appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 文件路径 -->
        <file>${log.filePath}/erorr.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 文件名称 -->
            <fileNamePattern>${log.filePath}/error/error.%d{yyyy-MM-dd}.log.gz
            </fileNamePattern>
            <!-- 文件最大保存历史数量 -->
            <maxHistory>${log.maxHistory}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <logger name="com.imooc.o2o" level="${log.level}" additivity="true">
        <appender-ref ref="debugAppender"/>
        <appender-ref ref="infoAppender"/>
        <appender-ref ref="errorAppender"/>
    </logger>
    <root level="info">
        <appender-ref ref="consoleAppender"/>
    </root>
</configuration>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值