Logback实例


Logback实例

resources文件下

application.yml

logging:
  level: debug

logback.yml

<!--
scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false-->
<configuration debug="true" scan="true" scanPeriod="60 seconds" packagingData="true">
    <!--
    property:用来定义变量值的标签,<property> 有两个属性,name和value。通过<property>定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。
    例如使用<property>定义上下文名称,然后在<contentName>设置logger上下文时使用。
    -->
    <property name="contextName" value="context-name" />
    <property name="log_home" value="/Users/sunyun/Downloads" />

    <!--
    contextName:每个logger都关联到logger上下文,默认上下文名称为“default”。
    但可以使用<contextName>设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改。
    -->
    <contextName>${contextName}</contextName>


    <!-- ******************** appender:日志目的地 start ******************** -->

    <!-- 标准输出:console -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoder 默认配置为PatternLayoutEncoder -->
        <encoder>
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 文件输出:file -->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log_home}/logback.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${log_home}/logback.%d{yyyyMMddHHmm}.log</FileNamePattern>
        </rollingPolicy>
        <encoder>
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
        <!--日志文件最大的大小-->
        <!--
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
          <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
        -->
    </appender>

    <!-- ******************** appender:日志目的地 end ******************** -->

    <!-- ******************** logger:精确配置packageclass的level、appender,可以配置0个或多个 end ******************** -->
    <!--
    level:日志级别(logger中的level会覆盖root中的,即以logger中为准,不管是否向上传递)
    name:包名 或 类的全路径
    addtivity:日志信息是否向上(root)传递
    -->
    <logger name="logback" />
    <!--logback.LogbackDemo:类的全路径 -->
    <logger name="logback.LogbackDemo" level="warn" additivity="false">
        <appender-ref ref="console"/>
        <appender-ref ref="file"/>
    </logger>

    <!-- ******************** logger:精确配置packageclass日志的level、appender end ******************** -->
    <!-- ******************** root:定义日志的level、appender,且最多只能配置一个 start ******************** -->
    <!--TRACE < DEBUG < INFO <  WARN < ERROR-->
    <root level="debug">
        <!-- 定义了INFO及以上级别的日志,分别在文件和控制台输出 -->
        <level value="debug" />
        <appender-ref ref="file" />
        <appender-ref ref="console" />
    </root>

    <!-- ******************** root:定义日志的level、appender,且最多只能配置一个 end ******************** -->
</configuration>

测试实例

package com.example.demo;

import ch.qos.logback.classic.Level;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class TestLogback {

    private static final Logger logger = LoggerFactory.getLogger(TestLogback.class);

    public static void main(String[] args) {

        //这里强制类型转换时为了能设置 logger 的 Level : TRACE < DEBUG < INFO <  WARN < ERROR
        ch.qos.logback.classic.Logger logback_logger = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger("com.foo");
        logback_logger.setLevel(Level.DEBUG);

        logback_logger.error("logback_logger.error");
        logback_logger.warn("logback_logger.warn");
        logback_logger.info("logback_logger.info");
        logback_logger.debug("logback_logger.debug");
        logback_logger.trace("logback_logger.trace");

        logger.error("logger.error");
        logger.warn("logger.warn");
        logger.info("logger.info");
        logger.debug("logger.debug");
        logger.trace("logger.trace");

        logger.info("日志开始处理.....");
        int x = 100, y = 200;
        int res = x + y;
        System.out.println(res);
        logger.info(String.valueOf(res));

        System.out.println("Hello World!");
        logger.info("程序开始!");
        try {
            for (int i=1; i<=10; i++){
                int r1=(int)(Math.random()*10);  //被除数
                int r2=(int)(Math.random()*100+99); //除数
                logger.debug("第"+i+"次计算表达式为:"+r2+"/"+r1);
                logger.debug("计算结果:"+(r2/r1));
                logger.info("----------------------------------");

            }

        }catch (ArithmeticException  e){
            logger.error("程序异常!除数等于0!");
            //log.error(e.getStackTrace().toString());
        }catch (Exception e){
            logger.error("程序异常!"+e.getMessage());
        }
    }
}

预期结果

控制台

/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home/bin/java "-javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=57703:/Applications/IntelliJ IDEA.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath /Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home/lib/packager.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home/lib/tools.jar:/Volumes/Share/工作/logback/target/classes:/Users/sunyun/.m2/repository/org/springframework/boot/spring-boot-starter/2.5.2/spring-boot-starter-2.5.2.jar:/Users/sunyun/.m2/repository/org/springframework/boot/spring-boot/2.5.2/spring-boot-2.5.2.jar:/Users/sunyun/.m2/repository/org/springframework/spring-context/5.3.8/spring-context-5.3.8.jar:/Users/sunyun/.m2/repository/org/springframework/spring-aop/5.3.8/spring-aop-5.3.8.jar:/Users/sunyun/.m2/repository/org/springframework/spring-beans/5.3.8/spring-beans-5.3.8.jar:/Users/sunyun/.m2/repository/org/springframework/spring-expression/5.3.8/spring-expression-5.3.8.jar:/Users/sunyun/.m2/repository/org/springframework/boot/spring-boot-autoconfigure/2.5.2/spring-boot-autoconfigure-2.5.2.jar:/Users/sunyun/.m2/repository/org/springframework/boot/spring-boot-starter-logging/2.5.2/spring-boot-starter-logging-2.5.2.jar:/Users/sunyun/.m2/repository/org/apache/logging/log4j/log4j-to-slf4j/2.14.1/log4j-to-slf4j-2.14.1.jar:/Users/sunyun/.m2/repository/org/apache/logging/log4j/log4j-api/2.14.1/log4j-api-2.14.1.jar:/Users/sunyun/.m2/repository/org/slf4j/jul-to-slf4j/1.7.31/jul-to-slf4j-1.7.31.jar:/Users/sunyun/.m2/repository/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar:/Users/sunyun/.m2/repository/org/springframework/spring-core/5.3.8/spring-core-5.3.8.jar:/Users/sunyun/.m2/repository/org/springframework/spring-jcl/5.3.8/spring-jcl-5.3.8.jar:/Users/sunyun/.m2/repository/org/yaml/snakeyaml/1.28/snakeyaml-1.28.jar:/Users/sunyun/.m2/repository/org/slf4j/slf4j-api/1.7.21/slf4j-api-1.7.21.jar:/Users/sunyun/.m2/repository/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar:/Users/sunyun/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar com.example.demo.TestLogback
09:30:20,985 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
09:30:20,985 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
09:30:20,985 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/Volumes/Share/%e5%b7%a5%e4%bd%9c/logback/target/classes/logback.xml]
09:30:21,284 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Will scan for changes in [file:/Volumes/Share/%e5%b7%a5%e4%bd%9c/logback/target/classes/logback.xml] 
09:30:21,284 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Setting ReconfigureOnChangeTask scanning period to 1 minutes
09:30:21,305 |-INFO in ch.qos.logback.classic.joran.action.ContextNameAction - Setting logger context name as [context-name]
09:30:21,306 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
09:30:21,315 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [console]
09:30:21,350 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
09:30:21,454 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
09:30:21,470 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [file]
09:30:21,506 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy@2075203460 - No compression will be used
09:30:21,509 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy@2075203460 - Will use the pattern /Users/sunyun/Downloads/logback.%d{yyyyMMddHHmm}.log for the active file
09:30:21,519 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - The date pattern is 'yyyyMMddHHmm' from file name pattern '/Users/sunyun/Downloads/logback.%d{yyyyMMddHHmm}.log'.
09:30:21,519 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Roll-over every minute.
09:30:21,532 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Setting initial period to Wed Jul 07 09:27:25 CST 2021
09:30:21,538 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
09:30:21,544 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[file] - Active log file name: /Users/sunyun/Downloads/logback.log
09:30:21,545 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[file] - File property is set to [/Users/sunyun/Downloads/logback.log]
09:30:21,549 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [logback.LogbackDemo] to WARN
09:30:21,550 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [logback.LogbackDemo] to false
09:30:21,550 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [console] to Logger[logback.LogbackDemo]
09:30:21,551 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [file] to Logger[logback.LogbackDemo]
09:30:21,551 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to DEBUG
09:30:21,552 |-INFO in ch.qos.logback.classic.joran.action.LevelAction - ROOT level set to DEBUG
09:30:21,552 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [file] to Logger[ROOT]
09:30:21,552 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [console] to Logger[ROOT]
09:30:21,552 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
09:30:21,554 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@d7b1517 - Registering current configuration as safe fallback point
09:30:21,564 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Elapsed period: Wed Jul 07 09:27:25 CST 2021
09:30:21,565 |-INFO in c.q.l.co.rolling.helper.RenameUtil - Renaming file [/Users/sunyun/Downloads/logback.log] to [/Users/sunyun/Downloads/logback.202107070927.log]
2021-07-07 09:30:21.564 [main] ERROR com.foo - logback_logger.error
2021-07-07 09:30:21.574 [main] WARN  com.foo - logback_logger.warn
2021-07-07 09:30:21.576 [main] INFO  com.foo - logback_logger.info
2021-07-07 09:30:21.576 [main] DEBUG com.foo - logback_logger.debug
2021-07-07 09:30:21.577 [main] ERROR com.example.demo.TestLogback - logger.error
2021-07-07 09:30:21.577 [main] WARN  com.example.demo.TestLogback - logger.warn
2021-07-07 09:30:21.577 [main] INFO  com.example.demo.TestLogback - logger.info
2021-07-07 09:30:21.578 [main] DEBUG com.example.demo.TestLogback - logger.debug
2021-07-07 09:30:21.578 [main] INFO  com.example.demo.TestLogback - 日志开始处理.....
300
2021-07-07 09:30:21.579 [main] INFO  com.example.demo.TestLogback - 300
Hello World!
2021-07-07 09:30:21.582 [main] INFO  com.example.demo.TestLogback - 程序开始!
2021-07-07 09:30:21.584 [main] DEBUG com.example.demo.TestLogback -1次计算表达式为:129/7
2021-07-07 09:30:21.584 [main] DEBUG com.example.demo.TestLogback - 计算结果:18
2021-07-07 09:30:21.584 [main] INFO  com.example.demo.TestLogback - ----------------------------------
2021-07-07 09:30:21.585 [main] DEBUG com.example.demo.TestLogback -2次计算表达式为:162/8
2021-07-07 09:30:21.585 [main] DEBUG com.example.demo.TestLogback - 计算结果:20
2021-07-07 09:30:21.585 [main] INFO  com.example.demo.TestLogback - ----------------------------------
2021-07-07 09:30:21.585 [main] DEBUG com.example.demo.TestLogback -3次计算表达式为:140/5
2021-07-07 09:30:21.585 [main] DEBUG com.example.demo.TestLogback - 计算结果:28
2021-07-07 09:30:21.586 [main] INFO  com.example.demo.TestLogback - ----------------------------------
2021-07-07 09:30:21.587 [main] DEBUG com.example.demo.TestLogback -4次计算表达式为:153/3
2021-07-07 09:30:21.589 [main] DEBUG com.example.demo.TestLogback - 计算结果:51
2021-07-07 09:30:21.589 [main] INFO  com.example.demo.TestLogback - ----------------------------------
2021-07-07 09:30:21.589 [main] DEBUG com.example.demo.TestLogback -5次计算表达式为:184/4
2021-07-07 09:30:21.589 [main] DEBUG com.example.demo.TestLogback - 计算结果:46
2021-07-07 09:30:21.590 [main] INFO  com.example.demo.TestLogback - ----------------------------------
2021-07-07 09:30:21.590 [main] DEBUG com.example.demo.TestLogback -6次计算表达式为:102/1
2021-07-07 09:30:21.590 [main] DEBUG com.example.demo.TestLogback - 计算结果:102
2021-07-07 09:30:21.590 [main] INFO  com.example.demo.TestLogback - ----------------------------------
2021-07-07 09:30:21.590 [main] DEBUG com.example.demo.TestLogback -7次计算表达式为:136/5
2021-07-07 09:30:21.591 [main] DEBUG com.example.demo.TestLogback - 计算结果:27
2021-07-07 09:30:21.591 [main] INFO  com.example.demo.TestLogback - ----------------------------------
2021-07-07 09:30:21.591 [main] DEBUG com.example.demo.TestLogback -8次计算表达式为:105/1
2021-07-07 09:30:21.591 [main] DEBUG com.example.demo.TestLogback - 计算结果:105
2021-07-07 09:30:21.592 [main] INFO  com.example.demo.TestLogback - ----------------------------------
2021-07-07 09:30:21.592 [main] DEBUG com.example.demo.TestLogback -9次计算表达式为:173/1
2021-07-07 09:30:21.592 [main] DEBUG com.example.demo.TestLogback - 计算结果:173
2021-07-07 09:30:21.592 [main] INFO  com.example.demo.TestLogback - ----------------------------------
2021-07-07 09:30:21.592 [main] DEBUG com.example.demo.TestLogback -10次计算表达式为:112/9
2021-07-07 09:30:21.593 [main] DEBUG com.example.demo.TestLogback - 计算结果:12
2021-07-07 09:30:21.593 [main] INFO  com.example.demo.TestLogback - ----------------------------------

Process finished with exit code 0

文件输出

image-20210707093114966
2021-07-07 09:30:21.564 [main] ERROR com.foo - logback_logger.error
2021-07-07 09:30:21.574 [main] WARN  com.foo - logback_logger.warn
2021-07-07 09:30:21.576 [main] INFO  com.foo - logback_logger.info
2021-07-07 09:30:21.576 [main] DEBUG com.foo - logback_logger.debug
2021-07-07 09:30:21.577 [main] ERROR com.example.demo.TestLogback - logger.error
2021-07-07 09:30:21.577 [main] WARN  com.example.demo.TestLogback - logger.warn
2021-07-07 09:30:21.577 [main] INFO  com.example.demo.TestLogback - logger.info
2021-07-07 09:30:21.578 [main] DEBUG com.example.demo.TestLogback - logger.debug
2021-07-07 09:30:21.578 [main] INFO  com.example.demo.TestLogback - 日志开始处理.....
2021-07-07 09:30:21.579 [main] INFO  com.example.demo.TestLogback - 300
2021-07-07 09:30:21.582 [main] INFO  com.example.demo.TestLogback - 程序开始!
2021-07-07 09:30:21.584 [main] DEBUG com.example.demo.TestLogback -1次计算表达式为:129/7
2021-07-07 09:30:21.584 [main] DEBUG com.example.demo.TestLogback - 计算结果:18
2021-07-07 09:30:21.584 [main] INFO  com.example.demo.TestLogback - ----------------------------------
2021-07-07 09:30:21.585 [main] DEBUG com.example.demo.TestLogback -2次计算表达式为:162/8
2021-07-07 09:30:21.585 [main] DEBUG com.example.demo.TestLogback - 计算结果:20
2021-07-07 09:30:21.585 [main] INFO  com.example.demo.TestLogback - ----------------------------------
2021-07-07 09:30:21.585 [main] DEBUG com.example.demo.TestLogback -3次计算表达式为:140/5
2021-07-07 09:30:21.585 [main] DEBUG com.example.demo.TestLogback - 计算结果:28
2021-07-07 09:30:21.586 [main] INFO  com.example.demo.TestLogback - ----------------------------------
2021-07-07 09:30:21.587 [main] DEBUG com.example.demo.TestLogback -4次计算表达式为:153/3
2021-07-07 09:30:21.589 [main] DEBUG com.example.demo.TestLogback - 计算结果:51
2021-07-07 09:30:21.589 [main] INFO  com.example.demo.TestLogback - ----------------------------------
2021-07-07 09:30:21.589 [main] DEBUG com.example.demo.TestLogback -5次计算表达式为:184/4
2021-07-07 09:30:21.589 [main] DEBUG com.example.demo.TestLogback - 计算结果:46
2021-07-07 09:30:21.590 [main] INFO  com.example.demo.TestLogback - ----------------------------------
2021-07-07 09:30:21.590 [main] DEBUG com.example.demo.TestLogback -6次计算表达式为:102/1
2021-07-07 09:30:21.590 [main] DEBUG com.example.demo.TestLogback - 计算结果:102
2021-07-07 09:30:21.590 [main] INFO  com.example.demo.TestLogback - ----------------------------------
2021-07-07 09:30:21.590 [main] DEBUG com.example.demo.TestLogback -7次计算表达式为:136/5
2021-07-07 09:30:21.591 [main] DEBUG com.example.demo.TestLogback - 计算结果:27
2021-07-07 09:30:21.591 [main] INFO  com.example.demo.TestLogback - ----------------------------------
2021-07-07 09:30:21.591 [main] DEBUG com.example.demo.TestLogback -8次计算表达式为:105/1
2021-07-07 09:30:21.591 [main] DEBUG com.example.demo.TestLogback - 计算结果:105
2021-07-07 09:30:21.592 [main] INFO  com.example.demo.TestLogback - ----------------------------------
2021-07-07 09:30:21.592 [main] DEBUG com.example.demo.TestLogback -9次计算表达式为:173/1
2021-07-07 09:30:21.592 [main] DEBUG com.example.demo.TestLogback - 计算结果:173
2021-07-07 09:30:21.592 [main] INFO  com.example.demo.TestLogback - ----------------------------------
2021-07-07 09:30:21.592 [main] DEBUG com.example.demo.TestLogback -10次计算表达式为:112/9
2021-07-07 09:30:21.593 [main] DEBUG com.example.demo.TestLogback - 计算结果:12
2021-07-07 09:30:21.593 [main] INFO  com.example.demo.TestLogback - ----------------------------------

配置参考

<?xml version="1.0" encoding="UTF-8"?>
<configuration  scan="true" scanPeriod="10 seconds">
    <contextName>logback</contextName>
    <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义后,可以使“${}”来使用变量。 -->
    <property name="log.path" value="./logs/supervise-collection" />

    <!--0. 日志格式和颜色渲染 -->
    <!-- 彩色日志依赖的渲染类 -->
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
    <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
    <!-- 彩色日志格式 -->
    <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>

    <!--1. 输出到控制台-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>debug</level>
        </filter>
        <encoder>
            <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>

        </encoder>
    </appender>

    <!--系统INFO级别日志-滚动记录日志-->
    <appender name="SYS_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值-->
        <File>${log.path}/sys_info/sys_info.log</File>
        <!--如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true-->
        <append>true</append>
        <!--级别过滤器(LevelFilter),此处只打INFO级别的日志-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <!--下面2个属性表示匹配规定level的接受打印,不匹配的(即非INFO)拒绝打印-->
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <!-- 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--设置滚动文件规则,如果直接使用 %d,默认格式是 yyyy-MM-dd-->
            <fileNamePattern>${log.path}/sys_info/sys_info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--保留30天的日志-->
            <maxHistory>180</maxHistory>
        </rollingPolicy>
        <!--日志文档输出格式-->
        <encoder charset="UTF-8">
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %level [%thread] %file:%line - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!--系统ERROR级别日志-滚动记录日志-->
    <appender name="SYS_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${log.path}/sys_error/sys_error.log</File>
        <append>true</append>
        <!--此处只打ERROR级别的日志-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--设置滚动文件规则,如果直接使用 %d,默认格式是 yyyy-MM-dd-->
            <fileNamePattern>${log.path}/sys_error/sys_error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>180</maxHistory>
        </rollingPolicy>

        <encoder charset="UTF-8">
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %level [%thread] %file:%line - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!--不同业务逻辑的日志打印到不同文件,见下面2种业务日志-->

    <!--数据包解析日志(Sjsb_XmlJX)-->
    <appender name="Sjsb_XmlJX_Appender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${log.path}/Sjsb_XmlJX/logjx.log</File>
        <append>true</append>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/Sjsb_XmlJX/logjx-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>20MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>180</maxHistory>
        </rollingPolicy>
        <encoder charset="UTF-8">
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %level [%thread] %file:%line - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!--记录索引表接口接收日志(Sjsb_SybJX)-->
    <appender name="Sjsb_SybJX_Appender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${log.path}/Sjsb_SybJX/log.log</File>
        <append>true</append>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/Sjsb_SybJX/log-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>20MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>180</maxHistory>
        </rollingPolicy>
        <encoder charset="UTF-8">
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %level [%thread] %file:%line - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!--记录数据包转移日志(Sjsb_Sjbzy)-->
    <appender name="Sjsb_Sjbzy_Appender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${log.path}/Sjsb_Sjbzy/log.log</File>
        <append>true</append>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/Sjsb_Sjbzy/log-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>20MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>180</maxHistory>
        </rollingPolicy>
        <encoder charset="UTF-8">
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %level [%thread] %file:%line - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- additivity属性为false,表示此logger的打印信息不再向上级传递(注:该值默认为true,logger的日志信息会依次向上级传递,最高级logger为root,如果不加则至少打印2次,本身一次,root一次)-->
    <logger name="Sjsb_XmlJX" additivity="false" level="INFO">
        <appender-ref ref="Sjsb_XmlJX_Appender"/>
    </logger>
    <logger name="Sjsb_SybJX" additivity="false" level="INFO">
        <appender-ref ref="Sjsb_SybJX_Appender"/>
    </logger>
    <logger name="Sjsb_Sjbzy" additivity="false" level="INFO">
        <appender-ref ref="Sjsb_Sjbzy_Appender"/>
    </logger>

    <!--info和error分开打印,注:ERROR > WARN > INFO > DEBUG > TRACE-->
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="SYS_INFO"/>
        <appender-ref ref="SYS_ERROR"/>
    </root>

</configuration>

文章作者: fejxc
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 fejxc !
评论
  目录