SpringBoot+slf4j+logback记录日志

2020-08-23  本文已影响0人  pingwazi

已亲测OK

有任何问题请联系我QQ:273206491

导包

  <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
        </dependency>

编写配置文件logback.xml(文件放在资源文件夹中)

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

    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
    <property name="LOG_HOME" value="/Users/apple/Desktop/CheckDBLogs" />

    <!--控制台日志, 控制台输出 -->
    <appender name="ConsoleLog" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度,%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <!--设置日志级别-->
            <level>ALL</level>
        </filter>
    </appender>
    <appender name="SysLocalFileLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/api.log</file><!--最新的日志记录位置-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}-%i.log</fileNamePattern><!--当单个日志文件超过最大尺寸时,就该文重命名为一个新的文件,并不再接受日志写入-->
            <maxFileSize>500MB</maxFileSize><!--单个日志文件的最大尺寸-->
            <maxHistory>20</maxHistory><!--最多保存多少个文件-->
            <totalSizeCap>20GB</totalSizeCap><!--所有日志文件的最大尺寸-->
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <!--设置日志级别-->
            <level>ERROR</level>
        </filter>
    </appender>
    <!--myibatis log configure-->
    <logger name="com.apache.ibatis" level="TRACE"/>
    <logger name="java.sql.Connection" level="DEBUG"/>
    <logger name="java.sql.Statement" level="DEBUG"/>
    <logger name="java.sql.PreparedStatement" level="DEBUG"/>

    <!-- 从高到地低 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE 、 ALL -->
    <!--
    root也是一个logger,只不过他是所有logger的根,如果子logger中没有指定相关信息,那么他就会到父logger中找
    logger中的level是定义日志记录的级别,比如这里的root就是记录DEBUG级别及以上的日志
    -->
    <root level="DEBUG">
        <appender-ref ref="ConsoleLog"/><!--控制台日志记录等级为所有日志-->
        <appender-ref ref="SysLocalFileLog"/><!--文件中只保存ERROR级别及其以上的日志-->
    </root>
</configuration>

使用

我这里测试是使用单元测试,当然你也可以不使用单元测试。只要创建一个Logger对象就可以了。
/**
 * @author pingwazi
 * @description
 */
@RunWith(SpringRunner.class)
@SpringBootTest(classes = ApplicationRun.class)
public class LogBackTest {
    private final static Logger logger = LoggerFactory.getLogger(LogBackTest.class);
    @Test
    public void writeLogTest()
    {
        while (true)
        {
            logger.error("测试日志写入");
        }
    }
}
上一篇 下一篇

猜你喜欢

热点阅读