【SpringBoot】项目集成logback实现服务器日志文件输出

【SpringBoot】项目集成logback实现服务器日志文件输出

参考文档:【SpringBoot】【log】自定义logback日志配置

常规配置

对于SpringBoot项目,可以通过集成 logback ,来实现对日志分级的输入。

  • 对日志分类、分级别输出到不同的日志文件
  • 对日志实现智能分割输出,按时间、大小进行切割,避免一个文件无限制增大

参考:附件-logback-spring.xml

mybatis-plus

配置日志实现类

mybatis-plus在对sql日志打印的时候,需要配置日志级别为DEBUG才能正常打印,不同的日志实现类,
实现的结果不同:

  • org.apache.ibatis.logging.stdout.StdOutImpl:只在控制台打印,核心使用的是System.out()
  • org.apache.ibatis.logging.slf4j.Slf4jImpl: 使用 slf4j框架,可以在输出到日志文件中
# mybatis
mybatis:
  mapper-locations: classpath:mybatis/*/*.xml,mybatis/*.xml
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

# mybatis-plus
mybatis-plus:
  mapper-locations: classpath:mybatis/*/*.xml,mybatis/*.xml
  configuration:
    # 在控制台打印
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    # 在日志文件中打印
    log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl

配置日志级别

# 日志配置
logging:
  level:
    web: INFO
    root: INFO
    sql: DEBUG
    # 配置Mapper所在包日志级别为 DEBUG
    com:
        baomidou:
            mybatisplus:DEBUG
        xxx:
            mapper: DEBUG

附件

logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 环境配置 -->
    <!-- root日志级别-->
    <springProperty scope="context" name="rootLevel" source="logging.level.root" defaultValue="INFO"/>
    <!-- sql日志级别-->
    <springProperty scope="context" name="sqlLevel" source="logging.level.sql" defaultValue="INFO"/>

    <!--用来定义变量值的标签-->
    <!-- 日志文件名称 -->
    <property name="APP_NAME" value="sharedGreen"/>
    <!-- 日志跟目录 -->
    <property name="LOG_HOME" value="./logs"/>
    <!-- 日志文件编码 -->
    <property name="encoding" value="UTF-8"/>
    <!-- 文件大小,默认为10MB-->
    <property name="maxFileSize" value="64MB"/>
    <!-- 配置日志的滚动时间,保存时间为60天-->
    <property name="maxHistory" value="60"/>
    <!--用来指定日志文件的上限大小,超过这个上限,开始删除旧日志-->
    <property name="totalSizeCap" value="16GB"/>


    <!-- 彩色日志依赖的渲染类 -->
    <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="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%level){blue} %clr(${PID}){magenta} %clr([%thread]){orange} %clr(%logger){cyan} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>

    <!--控制台输出格式:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
    <property name="console-pattern"
              value="%clr(%d{${LOG_DATEFORMAT_PATTERN:-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}"/>

    <!--非彩色日志输出格式:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度;%M:%L是方法和行号;%msg是日志消息;%n是换行符-->
    <property name="normal-pattern"
              value="%d{yyyy-MM-dd HH:mm:ss.SSS}|%X{localIp}|%X{requestId}|%X{requestSeq}|%X{country}|%X{deviceType}|%X{deviceId}|%X{userId}|^_^|[%t] %-5level %logger{50} %line - %m%n"/>
    <property name="logger-pattern"
              value="%d{yyyy-MM-dd HH:mm:ss} [%-5level] [%-5thread] [%X{request.url}] %logger{36} - %msg%n"/>
    <property name="jdbc-pattern"
              value="%d{yyyy-MM-dd HH:mm:ss} [%-5level] [%-5thread] [%X{request.url}] %logger{36} - %msg%n"/>


    <!--控制台输出-->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出-->
            <pattern>${console-pattern}</pattern>
        </encoder>
    </appender>

    <!-- 按照每天生成日志文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--日志文件输出的文件名-->
        <file>${LOG_HOME}/${APP_NAME}_stdout.log</file>
        <Append>true</Append>
        <prudent>false</prudent>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${logger-pattern}</pattern>
            <charset>${encoding}</charset>
        </encoder>
        <!--按时间和大小分割-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--文件名称-->
            <fileNamePattern>${LOG_HOME}/${APP_NAME}_stdout_%d{yyyy-MM-dd}_%i.log</fileNamePattern>
            <!--单个文件大小-->
            <maxFileSize>${maxFileSize}</maxFileSize>
            <!--最大保留天数-->
            <maxHistory>${maxHistory}</maxHistory>
            <!--用来指定日志文件的上限大小,超过这个上限,开始删除旧日志-->
            <totalSizeCap>${totalSizeCap}</totalSizeCap>
        </rollingPolicy>
    </appender>

    <!-- log file error -->
    <appender name="FILE-ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
        <file>${LOG_HOME}/${APP_NAME}_stderr.log</file>
        <prudent>false</prudent>
        <Append>true</Append>
        <encoder>
            <pattern>${logger-pattern}</pattern>
            <charset>${encoding}</charset>
        </encoder>
        <!--根据时间和大小来输出日志-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--文件名称-->
            <fileNamePattern>${LOG_HOME}/${APP_NAME}_stderr_%d{yyyy-MM-dd}_%i.log</fileNamePattern>
            <!--单个文件大小-->
            <maxFileSize>${maxFileSize}</maxFileSize>
            <!--最大保留天数-->
            <maxHistory>${maxHistory}</maxHistory>
            <!--用来指定日志文件的上限大小,超过这个上限,开始删除旧日志-->
            <totalSizeCap>${totalSizeCap}</totalSizeCap>
        </rollingPolicy>
    </appender>

    <!-- 默认jdbc日志输出文件 -->
    <appender name="FILE-JDBC" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 集群部署日志名建议加上ip和port -->
        <File>${LOG_HOME}/${APP_NAME}_jdbc.log</File>
        <!--<File>${LOG_HOME}/${APP_NAME}_jdbc_${IP}_${PORT}.log</File>-->
        <encoder>
            <pattern>${jdbc-pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>${sqlLevel}</level>
        </filter>
        <append>true</append>
        <!--根据时间来输出日志-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--文件名称-->
            <fileNamePattern>${LOG_HOME}/${APP_NAME}_jdbc_%d{yyyy-MM-dd}.log</fileNamePattern>
            <!--<fileNamePattern>${LOG_HOME}/${APP_NAME}_jdbc_%d{yyyy-MM-dd}_${IP}_${PORT}.log</fileNamePattern>-->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
    </appender>


    <!-- rest template logger-->
    <logger name="org.springframework.web.client.RestTemplate" level="DEBUG"/>
    <logger name="org.springframework" level="DEBUG"/>


    <!-- jdbc-->
    <logger name="jdbc.sqltiming" level="DEBUG"/>
    <logger name="org.mybatis" level="DEBUG"/>

    <!-- show parameters for ibatis sql 专为 ibatis 定制 -->
    <logger name="com.ibatis" level="DEBUG"/>
    <logger name="com.ibatis.common.jdbc.SimpleDataSource" level="DEBUG"/>
    <logger name="com.ibatis.common.jdbc.ScriptRunner" level="DEBUG"/>
    <logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate" level="DEBUG"/>
    <logger name="java.sql.Connection" level="DEBUG"/>
    <logger name="java.sql.Statement" level="DEBUG"/>
    <logger name="java.sql.PreparedStatement" level="DEBUG"/>
    <logger name="java.sql.ResultSet" level="DEBUG"/>

 	<!-- 指定 mapper 日志级别,DEBUG才会输出到日志文件中 -->
    <logger name="com.qingyan.sharedgreen.bussiness.mapper" level="${sqlLevel}">
        <appender-ref ref="FILE-JDBC"/>
    </logger>

    <!-- 项目日志 -->
    <logger name="com.qingyan" level="${rootLevel}"/>

    <!--开发环境:打印控制台-->
    <springProfile name="dev">
        <!-- 日志输出级别 -->
        <root leve="${rootLevel}">
            <appender-ref ref="STDOUT"/>
            <appender-ref ref="FILE"/>
            <appender-ref ref="FILE-ERROR"/>
        </root>
    </springProfile>

    <!--生产环境:输出到文件-->
    <springProfile name="pro">
        <!-- 日志输出级别 -->
        <root leve="${rootLevel}">
            <appender-ref ref="FILE"/>
            <appender-ref ref="FILE-ERROR"/>
        </root>
    </springProfile>

</configuration>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个简化了应用程序开发的框架,提供了快速构建和运行独立的、生产级的Spring应用程序的能力。Logback是一种日志记录框架,它是由Ceki Gülcü创建的,是Log4j的继任者。Logback支持异步日志记录和策略,具有高性能和低延迟的特点。 而Logstash是一个高度可扩展的开源日志收集和处理工具,它可以从各种数据源收集日志,并将其存储到中央存储库中。使用Logstash,我们可以将Spring Boot应用程序的日志输出发送到集中式日志服务器进行集中管理和处理。 在Spring Boot中,我们可以集成Logback和Logstash来处理应用程序的日志。我们可以通过在项目的依赖管理文件中引入相应的依赖,例如: ```xml <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </dependency> <dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> </dependency> ``` 然后,我们可以通过配置Logback来指定日志输出格式和目标。我们可以使用Logstash提供的编码器来将日志信息格式化为JSON格式,并将其发送到Logstash服务器。配置示例如下: ```xml <configuration> <appender name="logstash" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="net.logstash.logback.encoder.LogstashEncoder" /> </appender> <root level="info"> <appender-ref ref="logstash" /> </root> </configuration> ``` 通过以上配置,我们可以将Spring Boot应用程序的日志输出控制台,并通过Logstash将日志发送到集中式日志服务器进行集中处理和存储。这样可以方便我们对日志进行监控、检索和分析,有助于排查和解决应用程序中的问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值