spring boot使用经验分享(三)logback

springboot本身就继承了logback,但是想要输出日志还是需要各种配置(日志切分、格式、异步等),这种做下简单的总结。

一、配置文件

在resource下创建logback-spring.xml文件

使用springProperty标签

<springProperty scope="context" name="LOG_HOME" source="log.path" defaultValue="./logs"/>

<springProperty> 与Logback的标准 <property> 标签类似,根据source在对应文件加载配置。如果没有设置该属性的值,默认使用defaultValue。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
     <!-- 日志文件编码 -->
    <property name="LOG_CHARSET" value="UTF-8"/>

    <!-- 日志文件路径 -->
    <property name="LOG_DIR" value="${LOG_HOME}"/>

    <!-- 日志根目录 -->
    <springProperty scope="context" name="LOG_HOME" source="log.path" defaultValue="./logs"/>

    <!-- 日志文件名称 -->
    <springProperty scope="context" name="LOG_ROOT_LEVEL" source="log.root.level" defaultValue="INFO"/>

    <!-- 是否输出到控制台 -->
    <springProperty scope="context" name="LOG_STDOUT" source="log.stdout" defaultValue="false"/>

    <!-- 配置日志的滚动时间按小时滚动,默认保留3天 -->
    <springProperty scope="context" name="MAX_HISTORY_BIZ_HOUR" source="log.maxHistory.biz.hour" defaultValue="72"/>
    <springProperty scope="context" name="MAX_HISTORY_ERROR_HOUR" source="log.maxHistory.error.hour" defaultValue="72"/>
    <springProperty scope="context" name="MAX_HISTORY_DEBUG_HOUR" source="log.maxHistory.debug.hour" defaultValue="72"/>
    <springProperty scope="context" name="MAX_SIZE_CAP_VALUE" source="log.max.size.cap" defaultValue="4GB"/>

    <!--日志格式化 -->
    <property name="LOG_MSG"
              value="%level %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread %logger{36}] %msg%n"/>

    <property name="MAX_HISTORY_BIZ" value="${MAX_HISTORY_BIZ_HOUR}"/>
    <property name="MAX_HISTORY_ERROR" value="${MAX_HISTORY_ERROR_HOUR}"/>
    <property name="MAX_HISTORY_DEBUG" value="${MAX_HISTORY_DEBUG_HOUR}"/>
    <property name="MAX_SIZE_CAP" value="${MAX_SIZE_CAP_VALUE}"/>

    <!--输出到控制台 -->
    <appender name="STDOUT"
              class="ch.qos.logback.core.ConsoleAppender">
        <!-- 下面为配置只输出INFO以及其之下级别的日志 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <!-- 输出的日志内容格式化 -->
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>${LOG_MSG}</pattern>
        </layout>
    </appender>

    <!-- 定义 DEBUG 日志的输出方式: -->
    <appender name="FILE_DEBUG"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 下面为配置只输出DEBUG级别的日志 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <OnMismatch>DENY</OnMismatch>
            <OnMatch>ACCEPT</OnMatch>
        </filter>
        <!--日志文件路径,日志文件名称 -->
        <File>${LOG_DIR}/debug.log</File>

        <rollingPolicy
                class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_DIR}/debug.log.%d{yyyyMMddHH}
            </fileNamePattern>
            <maxHistory>${MAX_HISTORY_DEBUG}</maxHistory>
            <totalSizeCap>${MAX_SIZE_CAP}</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>

        <!-- 输出的日志内容格式化 -->
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>${LOG_MSG}</pattern>
        </layout>
    </appender>

    <appender name="FILE_BIZ"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 下面为配置只输出INFO以及其之下级别的日志 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <!--日志文件路径,日志文件名称 -->
        <File>${LOG_DIR}/biz.log</File>

        <rollingPolicy
                class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_DIR}/biz.log.%d{yyyyMMddHH}
            </fileNamePattern>
            <maxHistory>${MAX_HISTORY_BIZ}</maxHistory>
            <totalSizeCap>${MAX_SIZE_CAP}</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>

        <!-- 输出的日志内容格式化 -->
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>${LOG_MSG}</pattern>
        </layout>
    </appender>

    <!-- 定义 ERROR 日志的输出方式: -->
    <appender name="FILE_ERROR"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 下面为配置只输出error级别的日志 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <OnMismatch>DENY</OnMismatch>
            <OnMatch>ACCEPT</OnMatch>
        </filter>
        <!--日志文件路径,日志文件名称 -->
        <File>${LOG_DIR}/err.log</File>

        <rollingPolicy
                class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_DIR}/err.log.%d{yyyyMMddHH}
            </fileNamePattern>
            <maxHistory>${MAX_HISTORY_ERROR}</maxHistory>
            <totalSizeCap>${MAX_SIZE_CAP}</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>

        <!-- 输出的日志内容格式化 -->
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>${LOG_MSG}</Pattern>
        </layout>
    </appender>

    <!-- 异步日志 -->
    <appender name="ASYNC_FILE_BIZ"
              class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <queueSize>256</queueSize>
        <neverBlock>true</neverBlock>
        <appender-ref ref="FILE_BIZ"/>
    </appender>


    <!--DEBUG -->
    <appender name="ASYNC_FILE_DEBUG"
              class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
        <queueSize>256</queueSize>
        <neverBlock>true</neverBlock>
        <appender-ref ref="FILE_DEBUG"/>
    </appender>


    <!-- ERROR -->
    <appender name="ASYNC_FILE_ERROR"
              class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
        <queueSize>256</queueSize>
        <neverBlock>true</neverBlock>
        <appender-ref ref="FILE_ERROR"/>
    </appender>
    
    <!-- ${LOG_ROOT_LEVEL} 日志级别 -->
    <root level="${LOG_ROOT_LEVEL}">

        <if condition='property("LOG_STDOUT").equals("true")'>
            <then>
                <appender-ref ref="STDOUT"/>
            </then>
        </if>


       <appender-ref ref="ASYNC_FILE_DEBUG"/>

       <appender-ref ref="ASYNC_FILE_BIZ"/>


       <appender-ref ref="ASYNC_FILE_ERROR"/>

       

    </root>

</configuration>

二、说明

logback配置有几点需要注意的

1)生产环境不要输出控制台日志

2)建议异步输出日志,可以极大的提高性能。

3)最好不要打印行号,对性能影响不小

4)如果可能尽量缩短日志长度

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot使用logback打印日志非常简单,只需要以下几个步骤: 1. 添加依赖 在pom.xml文件中添加logback的依赖 ```xml <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </dependency> ``` 2. 配置logback.xml 在src/main/resources下新建logback.xml文件,配置logback日志输出格式和输出位置等信息。 例如,以下是一个简单的logback.xml配置文件: ```xml <configuration> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <logger name="com.example" level="DEBUG"/> <root level="INFO"> <appender-ref ref="CONSOLE"/> </root> </configuration> ``` 其中,`appender`定义了日志输出的方式,这里使用的是`ConsoleAppender`,即输出到控制台;`encoder`定义了日志的输出格式;`logger`定义了日志输出的级别,这里设置为DEBUG级别;`root`定义了日志输出的根级别,这里设置为INFO级别。 3. 在应用程序中使用logback 在需要打印日志的类中使用logback即可,例如: ```java import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class MyService { private static final Logger logger = LoggerFactory.getLogger(MyService.class); public void doSomething() { logger.debug("Debug log"); logger.info("Info log"); logger.warn("Warn log"); logger.error("Error log"); } } ``` 这里使用了`LoggerFactory.getLogger()`方法获取Logger对象,然后使用`debug()`、`info()`、`warn()`和`error()`等方法输出不同级别的日志信息。 以上就是在Spring Boot使用logback打印日志的基本步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值