zoukankan      html  css  js  c++  java
  • SpringBoot配置logback-spring.xml日志

    SpringBoot配置logback-spring.xml日志

    https://blog.csdn.net/qq_35618489/article/details/87709409

    在SpringBoot新建 logback-spring.xml 配置文件,因为SPringBoot官方是推荐这个方式

    内容,拷贝复制下来就可以了

    <?xml version="1.0" encoding="UTF-8"?>
    <!--
    scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
    scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒;当scan为true时,此属性生效。默认的时间间隔为1分钟。
    debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
    -->
    <configuration scan="false" scanPeriod="60 seconds" debug="false">
    <!-- 定义日志的根目录 -->
    <property name="LOG_HOME" value="logs"/>
    <!-- 定义日志文件名称 -->
    <property name="appName" value="docker"/>

    <!-- ch.qos.logback.core.ConsoleAppender 表示控制台输出 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <!--
    日志输出格式:
    %d表示日期时间,
    %thread表示线程名,
    %-5level:级别从左显示5个字符宽度
    %logger{50} 表示logger名字最长50个字符,否则按照句点分割。
    %msg:日志消息,
    %n是换行符
    -->
    <layout class="ch.qos.logback.classic.PatternLayout">
    <!-- 当指定application.properties 里面 spring.profiles.active=dev 时,采用第一种格式
    <springProfileb 标签的包含的范围可大可小,自己确定即可否则采用第二种格式-->
    <springProfile name="dev">
    <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ----> [%thread] ---> %-5level %logger{50} - %msg%n</pattern>
    </springProfile>
    <!--默认配置-->
    <springProfile name="!dev">
    <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ==== [%thread] ==== %-5level %logger{50} - %msg%n</pattern>
    </springProfile>
    </layout>
    </appender>


    <!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!-- 指定日志文件的名称 -->
    <file>${LOG_HOME}/${appName}.log</file>
    <!--
    当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名
    TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动。
    -->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <!--
    滚动时产生的文件的存放位置及文件名称 %d{yyyy-MM-dd}:按天进行日志滚动
    %i:当文件大小超过maxFileSize时,按照i进行文件滚动
    -->
    <fileNamePattern>${LOG_HOME}/${appName}-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
    <!--
    可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件。假设设置每天滚动,
    且maxHistory是365,则只保存最近365天的文件,删除之前的旧文件。注意,删除旧文件是,
    那些为了归档而创建的目录也会被删除。
    -->
    <MaxHistory>365</MaxHistory>
    <!--
    当日志文件超过maxFileSize指定的大小时,根据上面提到的%i进行日志文件滚动
    注意此处配置SizeBasedTriggeringPolicy是无法实现按文件大小进行滚动的,必须配置timeBasedFileNamingAndTriggeringPolicy
    -->
    <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
    <maxFileSize>100MB</maxFileSize>
    </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
    <!-- 日志输出格式: -->
    <layout class="ch.qos.logback.classic.PatternLayout">
    <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [ %thread ] - [ %-5level ] [ %logger{50} : %line ] - %msg%n</pattern>
    </layout>
    </appender>


    <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_HOME}/debug.log</file>
    <append>true</append>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
    <fileNamePattern>${LOG_HOME}/debug/%d{yyyy-MM-dd}/debug.%i.log.zip</fileNamePattern>
    <maxFileSize>10MB</maxFileSize>
    <maxHistory>7</maxHistory>
    <totalSizeCap>20GB</totalSizeCap>
    </rollingPolicy>
    <encoder>
    <pattern>[lf-1][${SERVER_NAME}][%d{yyyy-MM-dd HH:mm:ss.SSS}][%-5level][%thread][%file:%line] - %msg%n
    </pattern>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
    <level>DEBUG</level>
    <onMatch>ACCEPT</onMatch>
    <onMismatch>DENY</onMismatch>
    </filter>
    </appender>

    <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_HOME}/warn.log</file>
    <append>true</append>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
    <fileNamePattern>${LOG_HOME}/warn/%d{yyyy-MM-dd}/warn.%i.log.zip</fileNamePattern>
    <maxFileSize>10MB</maxFileSize>
    <maxHistory>7</maxHistory>
    <totalSizeCap>20GB</totalSizeCap>
    </rollingPolicy>
    <encoder>
    <pattern>[lf-1][${SERVER_NAME}][%d{yyyy-MM-dd HH:mm:ss.SSS}][%-5level][%thread][%file:%line] - %msg%n
    </pattern>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
    <level>WARN</level>
    <onMatch>ACCEPT</onMatch>
    <onMismatch>DENY</onMismatch>
    </filter>
    </appender>

    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_HOME}/error.log</file>
    <append>true</append>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
    <fileNamePattern>${LOG_HOME}/error/%d{yyyy-MM-dd}/error.%i.log.zip</fileNamePattern>
    <maxFileSize>10MB</maxFileSize>
    <maxHistory>7</maxHistory>
    <totalSizeCap>20GB</totalSizeCap>
    </rollingPolicy>
    <encoder>
    <pattern>[lf-1][${SERVER_NAME}][%d{yyyy-MM-dd HH:mm:ss.SSS}][%-5level][%thread][%file:%line] - %msg%n
    </pattern>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
    <level>ERROR</level>
    <onMatch>ACCEPT</onMatch>
    <onMismatch>DENY</onMismatch>
    </filter>
    </appender>

    <appender name="TRACE_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_HOME}/trace.log</file>
    <append>true</append>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
    <fileNamePattern>${LOG_HOME}/trace/%d{yyyy-MM-dd}/trace.%i.log.zip</fileNamePattern>
    <maxFileSize>10MB</maxFileSize>
    <maxHistory>7</maxHistory>
    <totalSizeCap>20GB</totalSizeCap>
    </rollingPolicy>
    <encoder>
    <pattern>[lf-1][${SERVER_NAME}][%d{yyyy-MM-dd HH:mm:ss.SSS}][%-5level][%thread][%file:%line] - %msg%n
    </pattern>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
    <level>TRACE</level>
    <onMatch>ACCEPT</onMatch>
    <onMismatch>DENY</onMismatch>
    </filter>
    </appender>

    <!--
    logger主要用于存放日志对象,也可以定义日志类型、级别
    name:表示匹配的logger类型前缀,也就是包的前半部分
    level:要记录的日志级别,包括 TRACE < DEBUG < INFO < WARN < ERROR
    additivity:作用在于children-logger是否使用 rootLogger配置的appender进行输出,
    false:表示只用当前logger的appender-ref,true:
    表示当前logger的appender-ref和rootLogger的appender-ref都有效
    -->

    <!-- Spring framework logger -->
    <logger name="org.springframework" level="debug" additivity="false"/>

    <!--
    root与logger是父子关系,没有特别定义则默认为root,任何一个类只会和一个logger对应,
    要么是定义的logger,要么是root,判断的关键在于找到这个logger,然后判断这个logger的appender和level。
    -->
    <root level="info">
    <appender-ref ref="CONSOLE"/>
    <appender-ref ref="FILE"/>

    <appender-ref ref="WARN_FILE"/>
    <appender-ref ref="ERROR_FILE"/>
    </root>

    <!--debug 日志级别-->
    <logger name="com.wjx" level="debug">
    <appender-ref ref="DEBUG_FILE"/>
    </logger>


    </configuration>
     

    测试代码:

    package com.wjx;

    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;

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class ApplicationTests {
    private Logger logger = LoggerFactory.getLogger(ApplicationTests.class);

    @Test
    public void contextLoads() {
    }


    @Test
    public void testLog() {
    logger.trace("这是 info 级别");
    logger.debug("这是 debug 级别");
    logger.info("这是 info 级别");
    logger.warn("这是 warn 级别");
    logger.error("这是 error 级别");
    }
    }
    测试日志截图


    ---------------------
    作者:小海龟的吻
    来源:CSDN
    原文:https://blog.csdn.net/qq_35618489/article/details/87709409
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    Blank page instead of the SharePoint Central Administration site
    BizTalk 2010 BAM Configure
    Use ODBA with Visio 2007
    Handling SOAP Exceptions in BizTalk Orchestrations
    BizTalk与WebMethods之间的EDI交换
    Append messages in BizTalk
    FTP protocol commands
    Using Dynamic Maps in BizTalk(From CodeProject)
    Synchronous To Asynchronous Flows Without An Orchestration的简单实现
    WSE3 and "Action for ultimate recipient is required but not present in the message."
  • 原文地址:https://www.cnblogs.com/handsome1013/p/11084156.html
Copyright © 2011-2022 走看看