zoukankan      html  css  js  c++  java
  • 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:UserskkmDesktopactualdsell_testlog
    #  file: C:UserskkmDesktopactualdsell_testlogdsell
    #  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:UserskkmDesktopactualdsell_testloginfoinfo.%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:UserskkmDesktopactualdsell_testlogerrorerror.%d.log
                </fileNamePattern>
            </rollingPolicy>
        </appender>
    
    
        <root level="info">
            <appender-ref ref="consoleLog" />
            <appender-ref ref="fileInfoLog" />
            <appender-ref ref="fileErrorLog" />
        </root>
    
    </configuration>
    View Code
  • 相关阅读:
    根据用户输入的时间查询那天的数据
    动软 生成 linq相关DAO
    pdf 移除密码 去除水印 批量去除水印 编辑文字 批量替换文字
    利用OCR识别扫描的jpg、tif文件的文字
    jstat命令详解
    IDEA自动编译设置
    IntelliJ IDEA:Field injection is not recommended
    阿里巴巴Druid数据库连接池配置详解及使用
    com.mysql.jdbc.Driver和com.mysql.cj.jdbc.Driver的区别
    Java对元与分的金额的转换
  • 原文地址:https://www.cnblogs.com/miaoliangJUN/p/11974410.html
Copyright © 2011-2022 走看看