news 2026/5/1 7:57:12

日志文件配置环境变量

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
日志文件配置环境变量

这是一个logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?> <!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 --> <!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true --> <!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 --> <!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 --> <configuration scan="true" scanPeriod="10 seconds"> <include resource="org/springframework/boot/logging/logback/base.xml" /> <logger name="org.springframework" level="OFF"/> <contextName>logback</contextName> <property name="JAR_DIR" value="${JAR_DIR:-${user.dir}}" scope="context"/> <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 --> <property name="log.path" value="${JAR_DIR}/logs" /> <!-- 彩色日志 --> <!-- 彩色日志依赖的渲染类 --> <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:-%n%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId}] [%logger{50}] [%level]: %msg}"/> <!--输出到控制台--> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <Pattern>${CONSOLE_LOG_PATTERN}</Pattern> <charset>UTF-8</charset> </encoder> </appender> <!--输出到文件--> <!-- 时间滚动输出 level为 DEBUG 日志 --> <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在记录的日志文件的路径及文件名 --> <file>${log.path}/log_debug.log</file> <!--日志文件输出格式--> <encoder> <!-- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>--> <pattern>%n%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId}] [%logger{50}] [%level]: %msg</pattern> <charset>UTF-8</charset> <!-- 设置字符集 --> </encoder> <!-- 日志记录器的滚动策略,按日期,按大小记录 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 日志归档 --> <fileNamePattern>${log.path}/debug/log-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>100MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!--日志文件保留天数--> <maxHistory>15</maxHistory> </rollingPolicy> <!-- 此日志文件只记录debug级别的 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>debug</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- 时间滚动输出 level为 INFO 日志 --> <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在记录的日志文件的路径及文件名 --> <file>${log.path}/log_info.log</file> <!--日志文件输出格式--> <encoder> <pattern>%n%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId}] [%logger{50}] [%level]: %msg</pattern> <charset>UTF-8</charset> </encoder> <!-- 日志记录器的滚动策略,按日期,按大小记录 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 每天日志归档路径以及格式 --> <fileNamePattern>${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>100MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!--日志文件保留天数--> <maxHistory>15</maxHistory> </rollingPolicy> <!-- 此日志文件只记录info级别的 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>info</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- 时间滚动输出 level为 WARN 日志 --> <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在记录的日志文件的路径及文件名 --> <file>${log.path}/log_warn.log</file> <!--日志文件输出格式--> <encoder> <pattern>%n%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId}] [%logger{50}] [%level]: %msg</pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> <!-- 日志记录器的滚动策略,按日期,按大小记录 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>100MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!--日志文件保留天数--> <maxHistory>15</maxHistory> </rollingPolicy> <!-- 此日志文件只记录warn级别的 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>warn</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- 时间滚动输出 level为 ERROR 日志 --> <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在记录的日志文件的路径及文件名 --> <file>${log.path}/log_error.log</file> <!--日志文件输出格式--> <encoder> <pattern>%n%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId}] [%logger{50}] [%level]: %msg</pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> <!-- 日志记录器的滚动策略,按日期,按大小记录 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>100MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!--日志文件保留天数--> <maxHistory>15</maxHistory> </rollingPolicy> <!-- 此日志文件只记录ERROR级别的 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!--开发环境:打印控制台--> <springProfile name="dev"> <logger name="com.yang.spring" level="CONSOLE, INFO, DEBUG"/> <root level="debug"> <appender-ref ref="STDOUT" /> <appender-ref ref="WARN_FILE" /> <appender-ref ref="INFO_FILE" /> <appender-ref ref="ERROR_FILE" /> <appender-ref ref="DEBUG_FILE" /> </root> </springProfile> <!--测试环境:输出到文件--> <springProfile name="test"> <root level="info"> <appender-ref ref="INFO_FILE" /> <appender-ref ref="ERROR_FILE" /> <appender-ref ref="WARN_FILE" /> </root> </springProfile> <!--生产环境:输出到文件--> <springProfile name="prod"> <root level="info"> <appender-ref ref="INFO_FILE" /> <appender-ref ref="ERROR_FILE" /> <appender-ref ref="WARN_FILE" /> </root> </springProfile> </configuration>

其中2行代码是:

<property name="JAR_DIR" value="${JAR_DIR:-${user.dir}}" scope="context"/> <property name="log.path" value="${JAR_DIR}/logs" />

这行配置定义了一个名为 JAR_DIR 的属性,它的值优先级如下:

语法说明

${变量名:-默认值}

优先级

1. 系统环境变量 JAR_DIR(优先级最高) 2. 否则使用 user.dir(当前工作目录)

scope="context" 作用

实际用途

<!-- 定义 JAR_DIR 属性 --> <property name="JAR_DIR" value="${JAR_DIR:-$ {user.dir}}" scope="context"/> <!-- 日志文件路径使用该属性 --> <file>${JAR_DIR}/logs/log_info.log</file>

总结

如何为 {JAR_DIR 赋值

JAR_DIR 赋值方式

1. JVM 系统属性(启动时指定)

# Linux/Mac java -DJAR_DIR=/var/logs/myapp -jar app.jar # Windows java -DJAR_DIR=D:\logs\myapp -jar app.jar

2. 环境变量

# Linux/Mac export JAR_DIR=/var/logs/myapp java -jar app.jar # Windows PowerShell $env:JAR_DIR = "D:\logs\myapp" java -jar app.jar # Windows CMD set JAR_DIR=D:\logs\myapp java -jar app.jar

3. Spring Boot 配置(推荐)

在 application.yml 中设置:

logging: file: path: D:\logs\myapp

或者自定义属性:

app: log-path: D:\logs\myapp

然后在 logback-spring.xml 中引用:

<property name="JAR_DIR" value="${app.log-path:-${user.dir}}"/>

4. 直接修改 logback-spring.xml

<!-- 硬编码路径 --> <property name="JAR_DIR" value="D:\logs\myapp" scope="context"/>




版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/27 10:15:20

Python调用MGeo避坑指南:requests超时与CUDA内存分配优化

Python调用MGeo避坑指南&#xff1a;requests超时与CUDA内存分配优化 引言&#xff1a;为什么需要关注MGeo的工程化调用问题&#xff1f; 在实体对齐任务中&#xff0c;地址相似度匹配是关键一环&#xff0c;尤其在中文地址场景下&#xff0c;由于命名不规范、缩写多样、层级嵌…

作者头像 李华
网站建设 2026/3/31 21:40:44

GPU算力资源紧张?Hunyuan-MT-7B 7B参数优化内存占用

GPU算力紧张&#xff1f;看Hunyuan-MT-7B如何用7B参数实现高效多语言翻译 在AI模型参数不断膨胀的今天&#xff0c;部署一个大模型动辄需要多卡A100、百GB显存&#xff0c;这让许多中小企业和研究团队望而却步。尤其是在机器翻译这类实际业务场景中&#xff0c;既要保证翻译质…

作者头像 李华
网站建设 2026/5/1 6:14:31

ArchSummit架构师大会展示Hunyuan-MT-7B部署案例

Hunyuan-MT-7B-WEBUI&#xff1a;从模型到服务的工程化跃迁 在AI大模型百花齐放的今天&#xff0c;一个耐人寻味的现象是&#xff1a;许多参数规模惊人的翻译模型发布后&#xff0c;真正能被业务团队“用起来”的却寥寥无几。不是模型不够强&#xff0c;而是部署门槛太高——你…

作者头像 李华
网站建设 2026/4/22 5:26:54

MGeo在环保监测中的应用:精确关联污染源企业地理位置

MGeo在环保监测中的应用&#xff1a;精确关联污染源企业地理位置 引言&#xff1a;环保监管中的地理信息对齐挑战 随着城市化进程加快和工业活动频繁&#xff0c;环境污染问题日益突出。环保部门在日常监管中面临一个关键难题&#xff1a;如何将分散在不同系统中的企业排污数…

作者头像 李华
网站建设 2026/4/13 8:21:37

快速搭建中文图像识别系统——阿里开源模型使用指南

快速搭建中文图像识别系统——阿里开源模型使用指南 在人工智能技术快速发展的今天&#xff0c;图像识别已成为智能硬件、内容审核、零售分析等多个领域的核心技术。然而&#xff0c;大多数开源图像识别模型以英文标签为主&#xff0c;对中文语境支持有限&#xff0c;难以满足国…

作者头像 李华
网站建设 2026/5/1 6:12:10

Vue3小白入门:官方文档这样读最有效

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个Vue3新手学习路径引导应用&#xff0c;包含&#xff1a;1) 分阶段学习路线图 2) 每个知识点的简化解释 3) 互动式代码练习区 4) 学习进度跟踪。设计要友好活泼&#xff0c…

作者头像 李华