Spring Boot如何进行日志集成呢?

戚薇 SpringBoot 发布时间:2023-06-06 10:17:04 阅读数:9122 1
下文笔者讲述SpringBoot日志集成的方法分享,如下所示

Spring Boot日志框架简介

Spring Boot支持Java Util Logging,Log4j2,Lockback作为日志框架
   当使用starters启动器
   Spring Boot将使用Logback作为默认日志框架

无论使用哪种日志框架
   Spring Boot都支持配置将日志输出到控制台或文件中

spring-boot-starter启动器
    包含spring-boot-starter-logging启动器并集成了slf4j日志抽象及Logback日志框架 

参考配置

#LOGGING
	logging.config= # Location of the logging configuration file. For instance `classpath:logback.xml` for Logback
	logging.exception-conversion-word=%wEx # Conversion word used when logging exceptions.
	logging.file= # Log file name. For instance `myapp.log`
	logging.level.*= # Log levels severity mapping. For instance `logging.level.org.springframework=DEBUG`
	logging.path= # Location of the log file. For instance `/var/log`
	logging.pattern.console= # Appender pattern for output to the console. Only supported with the default logback setup.
	logging.pattern.file= # Appender pattern for output to the file. Only supported with the default logback setup.
	logging.pattern.level= # Appender pattern for log level (default %5p). Only supported with the default logback setup.
	logging.register-shutdown-hook=false # Register a shutdown hook for the logging system when it is initialized.
	 
如:
	logging.level.root=DEBUG
	logging.level.org.springframework.web=DEBUG
	logging.level.org.hibernate=ERROR

自定义日志文件

通过不同的日志框架
   默认加载的日志配置文件的文件名
   放在资源根目录下
   其他的目录及文件名不能被加载

自定义日志文件位置

Logback	logback-spring.xml, logback-spring.groovy, logback.xml or logback.groovy
Log4j2	log4j2-spring.xml or log4j2.xml
JDK (Java Util Logging)	logging.properties

logback-spring.xml

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

    <springProperty scope="context" name="APP_NAME" source="spring.application.name"/>
    <springProperty scope="context" name="APP_PORT" source="server.port"/>
    <springProperty scope="context" name="DEFAULT_APP_PORT" source="spring.application.port"/>

    <property name="OS_NAME" value="${os.name}"/>
    <if condition='property("OS_NAME").contains("Windows")'>
        <then>
            <property name="LOG_PATH" value="${LOG_PATH:-E:/logs}" />
        </then>
        <else>
            <property name="LOG_PATH" value="${LOG_PATH:-/log}" />
        </else>
    </if>       

    <property name="LOG_DIR" value="${APP_NAME:-system}" />
    <property name="APP_PORT" value="${APP_PORT:-${DEFAULT_APP_PORT:-0}}" />
    <if condition='!property("APP_PORT").equals("0")'>
        <then>
            <property name="LOG_DIR" value="${LOG_DIR}-${APP_PORT}" />
        </then>
    </if>


    <!-- 控制台输出 -->
    <appender name="STDOUT" 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>
        </encoder>
    </appender>

    <!-- 按照每天生成日志文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名 -->
            <FileNamePattern>${LOG_PATH}/${LOG_DIR}/info.log.%d{yyyy-MM-dd}.log</FileNamePattern>

            <!--日志文件保留天数 -->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>

        <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>
        </encoder>

        <!--日志文件最大的大小 -->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>

    </appender>

    <!-- 按照每天生成日志文件 error级别 -->
    <appender name="FILE-ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>   
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名 -->
            <FileNamePattern>${LOG_PATH}/${LOG_DIR}/error.log.%d{yyyy-MM-dd}.log</FileNamePattern>

            <!--日志文件保留天数 -->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>

        <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>
        </encoder>

        <!--日志文件最大的大小 -->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>

    </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" />

    <!-- 日志输出级别 -->
    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
        <appender-ref ref="FILE-ERROR" />
    </root>

</configuration>
 
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/SpringBoot/202306/6723.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者