【日志】logback入门

logback 入门

实战,我的原则是,先会使用,然后再来剖析下源码了解下原理

一、代码

1、pom.xml

 <dependency>
     <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.2.3</version>
  </dependency>
  <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-core</artifactId>
      <version>1.2.3</version>
  </dependency>

2、logback.xml

<configuration scan="true" scanPeriod="60 second" debug="false">
	
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread%X{sourceThread}]%logger{24} - %msg%n</pattern>
        </encoder>
    </appender>

    <logger name="indi" level="info" additivity="false">
        <appender-ref ref="STDOUT"/>
    </logger>
    
    <root level="DEBUG">
        <appender-ref ref="STDOUT"/>
    </root>
</configuration>

3、Demo类,注意 package 路径

package indi.sword.logback.demo;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @author jeb_lin
 * 2:53 PM 01/03/2019
 */
public class Demo {
    public static void main(String[] arg){
        Logger logger = LoggerFactory.getLogger(Demo.class);
        logger.debug("debug");
        logger.info("info");
        logger.warn("warn");
        logger.error("error");

    }
}

4、运行 Main 方法:输出到控制台:

2019-03-01 16:48:17 INFO  [main]i.s.logback.demo.Demo - info
2019-03-01 16:48:17 WARN  [main]i.s.logback.demo.Demo - warn
2019-03-01 16:48:17 ERROR [main]i.s.logback.demo.Demo - error

Process finished with exit code 0

5、输出到文件(xml加上appender代码)

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>/var/tmp/logs/rolling01.log</file>
        <!-- 文件压缩策略(按时间) -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 文件压缩路径与格式 -->
            <fileNamePattern>/var/tmp/log/slog.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
            <maxHistory>7</maxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread%X{sourceThread}]%logger{24} - %msg%n
            </pattern>
        </encoder>
    </appender>
<logger name="indi" level="info" additivity="false">
        <appender-ref ref="FILE"/>
        <appender-ref ref="STDOUT"/>
</logger>

6、继续执行 main 方法,可以看到刚刚控制台的输出写到了 /Users/Documents/temp/logs/rolling01.log

7、重点注意日志级别Level,从Log4j过来的要注意一下(多了个 Trace 少了个 fatal)

log4j :DEBUG、INFO、WARN、ERROR、FATAL
logback : TRACE、DEBUG、INFO、WARN、ERROR

二、解释XML含义

1、root 根结点(根Logger)

<logger name="indi" level="info" additivity="false">
        <appender-ref ref="FILE"/>
        <appender-ref ref="STDOUT"/>
</logger>

修改为:
<logger name="indi" />-

2、控制台输出了:(多了句 debug),未输出到文件

2019-03-01 17:17:21 DEBUG [main]i.s.logback.demo.Demo - debug
2019-03-01 17:17:21 INFO  [main]i.s.logback.demo.Demo - info
2019-03-01 17:17:21 WARN  [main]i.s.logback.demo.Demo - warn
2019-03-01 17:17:21 ERROR [main]i.s.logback.demo.Demo - error

原因:
a、 “indi” 的logger 未设置Level,那么继承父类 root 的 debug(刚刚例子“indi”自己设置的是 info),打印了4条记录
b、 “indi”的“additivity”未设置,默认true,也就是父类帮他打印。
c、他自己未设置 appender ,那么他自己不打印,他爸爸帮他打印就行。
c、父类 root 只打印到 STOUT 没打印到 FILE,所以就都听爸爸的。

3、additivity属性测试 (additivity 设置为 true)

 <logger name="indi" level="info" additivity="true">
        <appender-ref ref="STDOUT"/>
    </logger>

    <root level="DEBUG">
        <appender-ref ref="STDOUT"/>
    </root>

控制台输出:(因为定义了两个 appender-ref ,所以打印出来了两份)

2019-03-01 17:36:01 INFO  [main]i.s.logback.demo.Demo - info
2019-03-01 17:36:01 INFO  [main]i.s.logback.demo.Demo - info
2019-03-01 17:36:01 WARN  [main]i.s.logback.demo.Demo - warn
2019-03-01 17:36:01 WARN  [main]i.s.logback.demo.Demo - warn
2019-03-01 17:36:01 ERROR [main]i.s.logback.demo.Demo - error
2019-03-01 17:36:01 ERROR [main]i.s.logback.demo.Demo - error

4、注意 logger name=“indi”,indi表示包名字,包路径越少范围越大,“indi”表示类的package为indi.*的logger都由他管理。比如刚刚那个Demo类,package为package indi.sword.logback.demo;就在 indi下面。

5、root 是所有logger的终极父类,所以我们测试下:logback.xml ,去掉其他logger

<?xml version="1.0" encoding="UTF-8"?>

<configuration scan="true" scanPeriod="60 second" debug="false">
    <!-- 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread%X{sourceThread}]%logger{24} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="DEBUG">
        <appender-ref ref="STDOUT"/>
    </root>
</configuration>

6、运行 Demo 类的Main方法,控制台输出:

2019-03-01 18:32:37 DEBUG [main]i.s.logback.demo.Demo - debug
2019-03-01 18:32:37 INFO  [main]i.s.logback.demo.Demo - info
2019-03-01 18:32:37 WARN  [main]i.s.logback.demo.Demo - warn
2019-03-01 18:32:37 ERROR [main]i.s.logback.demo.Demo - error

=============== 讲解结束 ===============

下篇预告:logback 的优点与代码剖析。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值