springBoot多环境日志文件输出,错误日志文件,INFO日志文件

本文详细介绍如何在SpringBoot项目中配置日志,包括控制台输出、不同级别的日志文件输出及滚动策略,并展示了如何通过自定义拦截器来处理特定的日志记录。

使用springBoot自带日志功能,pom无需导入


1、 application.yml 加入:

logging:
  config: classpath:logback-spring.xml

2、logback-spring.xml配置:

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true" scan="true" scanPeriod="30 seconds">

    <springProperty scope="context" name="logLevel" source="log.level"/>
    <springProperty scope="context" name="logPath" source="log.path"/>


    <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="${CONSOLE_LOG_PATTERN:-%clr(%d{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}}" />

    <!-- 控制台输出 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 系统INFO日志文件 -->
    <appender name="INFO_FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 过滤器,只打印ERROR级别的日志 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${logPath}/info.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>30</MaxHistory>
            <!--日志文件最大的大小-->
            <MaxFileSize>100MB</MaxFileSize>
        </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>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <logger name="info_error" additivity="true">
        <appender-ref ref="INFO_FILE"/>
    </logger>

    <!-- 系统错误日志文件 -->
    <appender name="SYSTEM_FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 过滤器,只打印ERROR级别的日志 -->
        <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.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${logPath}/error.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>30</MaxHistory>
            <!--日志文件最大的大小-->
            <MaxFileSize>100MB</MaxFileSize>
        </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>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <logger name="system_error" additivity="true">
        <appender-ref ref="SYSTEM_FILE"/>
    </logger>


    <!-- 自己打印的日志文件,用于记录特殊信息 -->
    <appender name="PUSH_ERROR_FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 过滤器,只打印ERROR级别的日志 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/push_error.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>30</MaxHistory>
            <!--日志文件最大的大小-->
            <MaxFileSize>100MB</MaxFileSize>
        </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>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <logger name="push_error" additivity="true">
        <appender-ref ref="PUSH_ERROR_FILE"/>
    </logger>


    <springProfile name="dev">
        <root level="${logLevel}">
            <appender-ref ref="CONSOLE" />
            <appender-ref ref="SYSTEM_FILE" />
            <appender-ref ref="INFO_FILE" />
        </root>
    </springProfile>

   
    <springProfile name="pro">
        <root level="${logLevel}">
            <appender-ref ref="CONSOLE" />
            <appender-ref ref="SYSTEM_FILE" />
            <appender-ref ref="INFO_FILE" />
        </root>
    </springProfile>

 
    <springProfile name="test">
        <root level="${logLevel}">
            <appender-ref ref="CONSOLE" />
            <appender-ref ref="SYSTEM_FILE" />
            <appender-ref ref="INFO_FILE" />
        </root>
    </springProfile>
</configuration>

3、dev   test    pro   环境配置:

#日志配置
log:
  path: /log
  level: debug

4、在自定义拦截器中处理:


        Logger logger  =  LoggerFactory.getLogger("push_error");
        private Environment environment;
        StringBuffer logOut = new StringBuffer();
        logOut.append(JSON.toJSONString(ex));
        logger.error(logOut.toString());

5、启动项目,查看log目录下的日志记录:

 

### 查看 Spring Boot 项目的日志输出文件位置 在 Spring Boot 项目中,可以通过配置 `application.properties` 或 `application.yml` 文件来指定日志输出文件的存储路径和文件名。默认情况下,Spring Boot日志输出到控制台,并不会写入日志文件[^2]。 如果需要将日志写入文件,可以在 `application.properties` 中设置以下属性之一: - **`logging.file.name`**:用于指定具体的日志文件名称,可以是相对路径或绝对路径。 - **`logging.file.path`**:用于指定日志文件所在的目录,会在该目录下生成一个名为 `spring.log` 的日志文件[^3]。 例如,在 `application.properties` 中添加以下内容以设置日志文件输出路径: ```properties # 设置日志文件输出路径(相对路径) logging.file.path=my-log/myLog # 或者使用绝对路径 logging.file.path=/spring-boot/logging ``` 也可以直接指定完整的日志文件名和路径: ```properties # 指定日志文件名及路径 logging.file.name=/spring-boot/logs/app.log ``` 上述配置完成后,日志信息将会被写入对应的文件中,可以通过访问这些文件来查看日志输出的具体位置。 此外,若希望更灵活地管理日志输出格式、级别等信息,推荐使用带有 `spring` 标识的日志配置文件,如 `logback-spring.xml` 或 `log4j2-spring.xml`。这些文件Spring Boot 解析,支持使用 Profile 功能实现不同环境下的日志配置[^1]。 在 `logback-spring.xml` 配置文件中,可以通过 `<property>` 标签定义日志文件的路径,并在 `<appender>` 中引用该路径,例如: ```xml <configuration> <property name="LOG_PATH" value="/spring-boot/logs"/> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> </appender> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_PATH}/app.log</file> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 日志文件的滚动策略 --> <fileNamePattern>${LOG_PATH}/app.%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> </appender> <root level="info"> <appender-ref ref="STDOUT"/> <appender-ref ref="FILE"/> </root> </configuration> ``` 通过上述配置,日志文件将会保存在 `/spring-boot/logs` 目录下,并按照日期进行归档。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值