spring_boot实战日记(二)logback的使用和配置

日志:描述系统运行状态的所有信息都是日志.

日志能力:

  1.定制输出目标.

  2.定制输出格式.

  3.携带上下文信息

  4.运行时选择输出.

  5.灵活的配置

日志选择:

  日志门面:JCL(和Logback不是一个作者) SLF4j(作者相同) jboos-logging(非面向大众)

  日志实现:Log4j(作者自己说太烂了) Log4j2(太过复杂,性能最优,但是基本上不会用到) Logback(Log4j的第二代) JUL(太过简陋)

  显然我们可以应该选择:SLF4j+Logback.

如何使用:

import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
/**
 * Created by kkm on 2019/12/3.
 */
@RunWith(SpringRunner.class)
@SpringBootTest

public class LoggerTest {
    private final Logger logger = LoggerFactory.getLogger(LoggerTest.class);
    @Test
    public void test1(){
        logger.debug("debug...");
        logger.info("info...");
        logger.error("error...");
    }
}
View Code

右键运行test1,可以在控制台看到输出.

可以看到debug没有输出,因为info等级比他高,如果下面有info要输出,那么debug不会输出.

window系统下面可以使用按键 ctrl+shift+alt+N,呼出类查找框 然后输入 Level 到slf4j中查找就可以看到各种级别的日志.

logger是LoggerFactory的实例化,这个地方应该填对应类名.

 可以看到现在输出就是当前类名,如果你改成其他类那么,这个输出也会改变.

 有的小伙伴说这样我每次写都要写个这个的实例化,太麻烦了,其实如果你懂控制反转的话,这一句是可以省略的,使用插件lombok,就可以使用注解省略这一句话,但是这样就是另外一个坑了.

如果有插件lombok,那么只需要这样写

package com.ccpuc;

import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
/**
 * Created by kkm on 2019/12/8.
 */
@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class LoggerTest {
    @Test
    public void test1(){
        log.debug("debug...");
        log.info("info...");
        log.error("error...");
    }
}
View Code

可以看到结果一样的

2019-12-08 21:06:46.738  INFO 7384 --- [           main] com.ccpuc.LoggerTest                     : info...
2019-12-08 21:06:46.738 ERROR 7384 --- [           main] com.ccpuc.LoggerTest                     : error...
View Code

除了可以使用字符串拼接,log还支持格式化输出.

log.info("name:{},,,id:{}","第一个大括号","第二个大括号");

输出:2019-12-08 21:10:53.209  INFO 13036 --- [           main] com.ccpuc.LoggerTest                     : name:第一个大括号,,,id:第二个大括号
View Code

以上都是在控制台输出,logback还支持文件输出.

logback的配置方法,可以通过applicatin.yml文件配置.

logging.pattern.console : 输出到控制台的格式.(顺带一提,yml的注释使用#)

logging.config : 配置文件路径

logging.path : 输出的日志文件路径(这个会使用默认的spring作为文件名称)

logging.file : 输出的日志文件路径(这个可以指定)

logging.level : 指定输出日志的级别,level还可以指定到包指定到类.

logging:
  pattern:
#    console: "%d - %msg%n"
#  path: C:\Users\kkm\Desktop\actual\dsell_test\log
#  file: C:\Users\kkm\Desktop\actual\dsell_test\log\dsell
#  level:
#    com.ccpuc.LoggerTest : debug

去掉#既可以生效.

 记得要注释掉上面的然后再用logback-spring.xml来配置.

还可以通过logback-spring.xml来配置,上面的application.yml的配置比较简单.往往需要使用xml来配置才能满足我们日常的需要.

具体可以看代码...注释解释...

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

<configuration>
    <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
                <!--日志格式-->
                <pattern>
                    %d - %msg%n
                </pattern>
        </layout>
    </appender>

    <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">

        <!--根据等级过滤-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!--要过滤除INFO等级以外的,如果onMatch,就ACCEPT,就是接收日志,反之DENY,就是过滤不要-->
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <encoder>
            <!--日志格式-->
            <pattern>
                %msg%n
            </pattern>
        </encoder>
        <!--滚动策略,基于时间-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--输出文件-->
            <fileNamePattern>
                C:\Users\kkm\Desktop\actual\dsell_test\log\info\info.%d.log
            </fileNamePattern>
        </rollingPolicy>
    </appender>


    <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--根据等级范围过滤,就是过滤掉选择等级低的日志信息-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
        <encoder>
            <!--日志格式-->
            <pattern>
                %msg%n
            </pattern>
        </encoder>
        <!--滚动策略,基于时间-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--输出文件-->
            <fileNamePattern>
                C:\Users\kkm\Desktop\actual\dsell_test\log\error\error.%d.log
            </fileNamePattern>
        </rollingPolicy>
    </appender>


    <root level="info">
        <appender-ref ref="consoleLog" />
        <appender-ref ref="fileInfoLog" />
        <appender-ref ref="fileErrorLog" />
    </root>

</configuration>
View Code

猜你喜欢

转载自www.cnblogs.com/miaoliangJUN/p/11974410.html