spring profile 生成每日的日志

本文详细解析了Logback的日志配置方法,包括控制台输出、日志文件存储、滚动策略及不同环境下的配置差异。介绍了如何实现彩色日志、日志文件按天分割以及日志级别控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <!--引入默认的一些设置-->
    <!-- <include resource="org/springframework/boot/logging/logback/base.xml"/> -->
    <!-- 彩色日志 -->
    <!-- 彩色日志依赖的渲染类 -->
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />

    <springProperty scope="context" name="springAppName" source="spring.application.name"/>
    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径 -->
    <springProperty scope="context" name="LOG_HOME" source="log.path" defaultValue="./log"/>


    <!-- 控制台输出 -->
    <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--彩色日志控制台打印-->
            <pattern>%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%-5level) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%20.20thread]){faint} %clr(%-50.50logger{50}){cyan} %clr(:){faint} %msg%n</pattern>
            <!--格式化输出:%d表示日期,%-5level:级别从左显示5个字符宽度,${PID:- }进程id %thread表示线程名,%msg:日志消息,%n是换行符 -->
            <!--<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID:- } -&#45;&#45; [%thread] %logger{50} - %msg%n</pattern>-->
        </encoder>
    </appender>


    <springProfile name="local,dev,test,prod">
        <!-- 按照每天生成日志文件 -->
        <!-- 注意这里一定要放到springProfile里, 否则在你本机执行的时候还是会去找相应的文件 -->
        <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!-- 生成每日的日志 -->
            <Prudent>true</Prudent>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!--日志文件输出的文件名-->
                <FileNamePattern>${LOG_HOME}/${springAppName}.%d{yyyy-MM-dd}.log</FileNamePattern>
                <!--日志文件保留天数-->
                <maxHistory>15</maxHistory>
                <totalSizeCap>5GB</totalSizeCap>
            </rollingPolicy>
            <!-- 追加方式记录日志 -->
            <append>true</append>
            <!-- 日志文件的格式 -->
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
                <pattern>${springAppName}:%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
                <charset>utf-8</charset>
            </encoder>
            <!--日志文件最大的大小-->
            <!-- 需要生成每日的日志注释这里的配置 -->
            <!--<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                <MaxFileSize>10MB</MaxFileSize>
            </triggeringPolicy>-->
        </appender>

        <appender name="asyncFileAppender" class="ch.qos.logback.classic.AsyncAppender">
            <discardingThreshold>0</discardingThreshold>
            <queueSize>500</queueSize>
            <appender-ref ref="FILE"/>
        </appender>
    </springProfile>

    <!-- <logger name="org.springframework.web"   additivity="true" level="INFO"/>
     <logger name="org.apache"   additivity="true" level="error"/>
     <logger name="com.huaxiang"   additivity="true" level="INFO"/>
     <logger name="xx.common.feign"   additivity="true" level="DEBUG"/> -->
     <logger name="java.sql.Statement"   additivity="true" level="DEBUG"/> 
    <logger name="java.sql.PreparedStatement" additivity="true" level="TRACE"/>

    <springProfile name="local,dev">
        <root level="INFO">
            <appender-ref ref="consoleAppender"/>
            <appender-ref ref="asyncFileAppender"/>
        </root>
    </springProfile>

    <springProfile name="test,prod">
        <root level="INFO">
            <appender-ref ref="consoleAppender"/>
            <appender-ref ref="asyncFileAppender"/>
        </root>
    </springProfile>

</configuration>
<think>好的,我现在需要回答用户关于在Log4j2中结合springProfile使用的配置问题,并提供示例。首先,我需要回顾用户提供的引用内容,特别是引用[2]和[4]、[5],了解Log4j2在Spring Boot中的整合和配置方法。 用户的问题涉及到springProfile标签的使用,这在Log4j2配置文件中用于根据不同的Spring环境配置不同的日志策略。根据我的知识,Spring Boot允许使用Log4j2作为日志框架,并且支持通过Springprofile来切换配置。需要确认Log4j2的配置文件中如何使用Spring的特定标签,比如<SpringProfile>。 接下来,我需要检查引用内容是否有相关信息。引用[2]展示了Log4j2的测试用例,但未涉及配置文件的具体结构。引用[5]提到使用不同的环境配置,通过JVM参数设置,可能涉及Property Substitution,但用户需要的是结合springProfile,这可能需要在Log4j2的XML配置中使用Spring的标签。 根据Log4j2的文档,要使用Springprofile功能,需要在配置文件中引入Spring的命名空间,并使用<SpringProfile>标签包裹不同的配置部分。例如,可以为开发环境和生产环境设置不同的日志级别或输出目标。 然后,我需要确保配置文件的正确性,比如命名空间声明是否正确,标签是否正确嵌套。例如,在log4j2.xml或log4j2-spring.xml中,需要添加springProfile相关的命名空间,并正确使用属性来指定profile名称。 另外,用户可能需要知道如何激活不同的profile,比如通过application.properties中的spring.profiles.active属性,或者启动参数。同时,确保引用的配置示例正确,比如使用name属性指定profile,并包含相应的appender和logger配置。 最后,生成相关问题,考虑用户可能进一步询问如何根据profile动态调整日志级别,或者如何处理多环境的配置管理,以及可能的性能影响等。</think>在Log4j2中结合`springProfile`配置可实现环境差异化管理日志策略,以下是配置步骤及示例: --- ### 一、配置原理 1. **SpringProfile标签**:Log4j2通过`<SpringProfile>`标签识别不同环境配置,需在配置文件中声明Spring命名空间 2. **激活机制**:通过`spring.profiles.active`参数触发对应配置 3. **文件要求**:建议使用`log4j2-spring.xml`而非`log4j2.xml`以启用Spring扩展功能[^2] --- ### 二、完整配置示例(log4j2-spring.xml) ```xml <?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN" xmlns="http://logging.apache.org/log4j/2.0/config" xmlns:spring="http://www.springframework.org/schema/log4j2"> <Appenders> <!-- 开发环境专用Console Appender --> <spring:Profile name="dev"> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> </Console> </spring:Profile> <!-- 生产环境专用RollingFile Appender --> <spring:Profile name="prod"> <RollingFile name="RollingFile" fileName="logs/app.log" filePattern="logs/$${date:yyyy-MM}/app-%d{yyyy-MM-dd}-%i.log.gz"> <PatternLayout> <Pattern>%d %p %c{1.} [%t] %m%n</Pattern> </PatternLayout> <Policies> <SizeBasedTriggeringPolicy size="100 MB"/> </Policies> <DefaultRolloverStrategy max="10"/> </RollingFile> </spring:Profile> </Appenders> <Loggers> <Root level="info"> <!-- 动态引用Appender --> <spring:Profile name="dev"> <AppenderRef ref="Console"/> </spring:Profile> <spring:Profile name="prod"> <AppenderRef ref="RollingFile"/> </spring:Profile> </Root> <!-- 环境特定日志级别控制 --> <spring:Profile name="dev"> <Logger name="com.example" level="debug" additivity="false"/> </spring:Profile> </Loggers> </Configuration> ``` --- ### 三、激活Profile方式 1. **application.properties**: ```properties spring.profiles.active=dev ``` 2. **JVM启动参数**: ```bash java -jar yourapp.jar --spring.profiles.active=prod ``` 3. **多环境激活**(逗号分隔): ```properties spring.profiles.active=dev,featureA ``` --- ### 四、验证配置有效性 在测试类中使用多级别日志输出: ```java @SpringBootTest @ActiveProfiles("dev") // 强制激活dev环境 public class LogTest { private static final Logger logger = LogManager.getLogger(); @Test void testProfileLogging() { logger.debug("仅dev环境可见的调试信息"); logger.info("通用信息日志"); } } ``` --- ### 五、注意事项 1. **命名空间必须声明**:`xmlns:spring="http://www.springframework.org/schema/log4j2"` 2. **优先级问题**:`log4j2-spring.xml`的加载优先级高于`log4j2.xml`[^4] 3. **热更新支持**:通过`monitorInterval="30"`属性可实现配置文件热加载 4. **多profile组合**:支持逻辑表达式如`<spring:Profile name="prod & cloud">` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值