SpringBoot中自带日志logback的配置 [配置模板]

1. 简单配置

如果只是简单的记录日志,想把日志记录到文件中,在application.properties中简单配置

# 设置整个项目的代码调试级别是debug
logging.level.top.jarvaniv=debug
logging.file.name=D:/project/forum/NowCoderBBS/log/community.log

top.jarvaniv是我项目的包名。

第一个配置:项目日志中显示debug以上级别的日志。
第二个配置:日志文件的路径和文件名。详情看这篇博客:日志loggin.file过时问题

额外科普:日志级别

点我查看


2. 详细配置

项目开发中,日志不会都存放在同一文件中,需要按照日志级别等分类,单个日志文件不能过大,这些都可以通过配置文件自定义。

SpringBoot项目中创建logback-spring.xml文件,放在项目的resources目录下,SpringBoot就会自动识别并且应用。这个是约定,不用这个文件名不会被识别。

模板代码:
不懂的地方在代码里有注释

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <contextName>NowCoderBBS</contextName>  <!-- 项目名 -->
    <property name="LOG_PATH" value="D:/project/forum/NowCoderBBS"/>    <!-- 日志存放目录 -->
    <property name="APPDIR" value="log"/> <!-- 项目目录,日志存放目录可能存放多个项目 -->

    <!-- error file 配置error级别相关的日志 -->
    <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/${APPDIR}/log_error.log</file>    <!-- error日志目录路径+日志文件名 -->
        <!-- 文件存放策略,如果一个文件存放不下,怎么创建新的文件 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件的命名方式:%d:日期,日期格式;%i是变量,1、2、3等-->
            <fileNamePattern>${LOG_PATH}/${APPDIR}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>5MB</maxFileSize>  <!-- 单个日志文件大小上限,大小到5MB后创建新日志文件存储 -->
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>30</maxHistory> <!-- 日志文件最多存储多久,单位:天 -->
        </rollingPolicy>
        <append>true</append>   <!-- 以追加的方式存储,而不是覆盖 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!-- 日志记录格式:日期 级别 哪个线程 哪个类 哪个文件 哪一行 具体日期信息 换行 -->
            <pattern>%d %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
            <charset>utf-8</charset>	<!-- 编码方式 -->
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">  <!-- 过滤器 -->
            <level>error</level>    <!-- 筛选error级别的日志 -->
            <onMatch>ACCEPT</onMatch>   <!-- 是这个级别的就记录 -->
            <onMismatch>DENY</onMismatch>   <!-- 不是这个级别的拒绝记录 -->
        </filter>
    </appender>

	<!-- 各个级别的配置方式大同小异,注释参考error -->
    <!-- warn file -->
    <appender name="FILE_WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/${APPDIR}/log_warn.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/${APPDIR}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>5MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <append>true</append>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>warn</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- info file -->
    <appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/${APPDIR}/log_info.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/${APPDIR}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>5MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <append>true</append>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>info</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- console 控制台:日志打印到控制台 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!-- 日志输出格式:日期 日志级别 线程 类 [文件名:哪行] -->
            <pattern>%d %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <!-- 过滤器 -->
            <level>debug</level>    <!-- 允许打印debug以上级别的日志 -->
        </filter>
    </appender>

    <logger name="com.nowcoder.community" level="debug"/>   <!-- 单独声明哪个包下的日志是什么级别 -->

    <root level="info"> <!-- 所有项目根目录的级别是info-->
        <!-- 最后,启用这些日志配置 -->
        <appender-ref ref="FILE_ERROR"/>
        <appender-ref ref="FILE_WARN"/>
        <appender-ref ref="FILE_INFO"/>
        <appender-ref ref="STDOUT"/>
    </root>

</configuration>

注意:配置文件中只配置了infowarnerror级别的日志,没有配置debug级别的日志,所以一会测试不会生成debug的日志文件。

测试

测试代码
@SpringBootTest
@RunWith(SpringRunner.class)
public class LoggerTest {
	// 通过日志工厂实例化日志对象,参数通常就是当前类
    public static final Logger logger = LoggerFactory.getLogger(LoggerTest.class);

    @Test
    public void test01() {

        System.out.println(logger.getName());	// 打印日志对象名字

        logger.debug("debug log");	// 输出debug日志
        logger.info("info log");	// 输出info日志
        logger.warn("warn log");	// 输出warn日志
        logger.error("error log");	// 输出error日志

    }
}

运行结果

打印出日志对象名,三种日志类型
在这里插入图片描述

日志文件

配置文件中没有配置debug相关的日志处理,果然没有生成debug级别的日志文件。
在这里插入图片描述
因为日志文件比较小没有超过5MB,没有分离创建新的日志文件,所以使用默认命名,而不是指定的日志文件名格式。

日志内容按照级别分类
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值