<?xml version="1.0" encoding="UTF-8"?><configurationscan="true"scanPeriod="30 seconds"><!-- 1. 基础变量定义 --><propertyname="LOG_APP_NAME"value="SmartProcurement"/><propertyname="LOG_BASE_PATH"value="logs"/><propertyname="LOG_PATTERN"value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n"/><!-- 2. 控制台输出配置 --><appendername="CONSOLE"class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>${LOG_PATTERN}</pattern><charset>UTF-8</charset></encoder></appender><!-- 3. 普通日志文件输出(按天滚动 + 大小切割) --><appendername="FILE"class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${LOG_BASE_PATH}/${LOG_APP_NAME}.log</file><rollingPolicyclass="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${LOG_BASE_PATH}/${LOG_APP_NAME}-%d{yyyy-MM-dd}.%i.log</fileNamePattern><maxHistory>30</maxHistory><timeBasedFileNamingAndTriggeringPolicyclass="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>100MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy><encoder><pattern>${LOG_PATTERN}</pattern><charset>UTF-8</charset></encoder></appender><!-- 4. 错误日志单独输出 --><appendername="ERROR_FILE"class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${LOG_BASE_PATH}/${LOG_APP_NAME}-error.log</file><filterclass="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter><rollingPolicyclass="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${LOG_BASE_PATH}/${LOG_APP_NAME}-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern><maxHistory>30</maxHistory><timeBasedFileNamingAndTriggeringPolicyclass="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>100MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy><encoder><pattern>${LOG_PATTERN}</pattern><charset>UTF-8</charset></encoder></appender><!-- 5. SQL 日志单独配置(MyBatis/MyBatis-Plus 场景) --><loggername="com.iflytek.knowledge.mapper"level="DEBUG"additivity="false"><appender-refref="CONSOLE"/><appender-refref="FILE"/></logger><!-- 6. 按环境区分日志级别 --><springProfilename="test"><rootlevel="INFO"><appender-refref="CONSOLE"/><appender-refref="FILE"/><appender-refref="ERROR_FILE"/></root></springProfile><springProfilename="prod"><!-- <root level="INFO">--><!-- <appender-ref ref="FILE"/>--><!-- <appender-ref ref="ERROR_FILE"/>--><!-- </root>--><!-- <!– 生产环境关闭 SQL 调试日志 –>--><!-- <logger name="com.iflytek.knowledge.mapper" level="INFO" additivity="false">--><!-- <appender-ref ref="FILE"/>--><!-- </logger>--><rootlevel="INFO"><appender-refref="CONSOLE"/><appender-refref="FILE"/><appender-refref="ERROR_FILE"/></root></springProfile></configuration>日志打印配置:logback-spring.xml配置;info和error完全区分了,并且按时间拆分了
张小明
前端开发工程师
基于SpringBoot的宠物店管理系统(毕业设计项目源码+文档)
课题摘要在宠物行业规模化发展、传统宠物店管理存在 “库存管控混乱、客户服务滞后、消费记录零散、营收统计低效” 的经营痛点背景下,基于 SpringBoot 的宠物店管理系统构建具有重要的商业与用户价值:从门店运营层面,系统整合宠物用品&#…
Mockito实战指南
Mockito 单元测试框架实战一、Mockito 简介 Mockito 是 Java 生态中最流行的 Mock 框架,被广泛应用于单元测试中。它提供了简洁优雅的 API,帮助开发者轻松创建和配置 Mock 对象,从而实现对依赖项的隔离测试。 1.1 为什么需要 Mock?…
AutoGPT项目核心架构与组件解析
AutoGPT 架构深度解析:从自主智能体到模块化生态 在生成式AI的浪潮中,我们早已习惯了与聊天机器人对话、让它写邮件、写代码、甚至讲笑话。但有没有一种AI,不仅能回答问题,还能主动思考、规划步骤、调用工具、修正错误࿰…
LobeChat能否实现AI生成待办事项?GTD时间管理助手
LobeChat能否实现AI生成待办事项?GTD时间管理助手 在快节奏的工作环境中,你是否经常遇到这样的场景:刚开完一场头脑风暴会议,满脑子都是待办事项,却不知道从何下手整理?或是深夜灵光一现,“明天…
GCC编译选项
安全保护相关 gcc栈溢出保护机制:stack-protector https://blog.csdn.net/qq_41573572/article/details/136891830 https://www.cnblogs.com/arnoldlu/p/11630979.html ---
选对LIMS不踩坑!三大维度解锁性能评估秘籍
评估LIMS软件性能,是实验室数字化转型进程中至关重要的决策环节。一套优质的LIMS(实验室信息管理系统),不仅能显著提升运营效率、筑牢数据合规防线,更能为实验室长远发展提供坚实的数字化支撑。那么,如何系…