news 2026/10/15 19:55:28

日志文件配置环境变量

作者头像

张小明

前端开发工程师

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/10/15 17:31:26

实时视频流识别可行吗?万物识别模型帧处理延迟实测

实时视频流识别可行吗&#xff1f;万物识别模型帧处理延迟实测核心结论先行&#xff1a;在消费级GPU&#xff08;如RTX 3060&#xff09;上运行阿里开源的“万物识别-中文-通用领域”模型&#xff0c;单帧图像推理延迟约为230ms~280ms&#xff0c;理论最大处理能力为3.5~4.3 FP…

作者头像 李华
网站建设 2026/10/15 0:24:26

前端——响应式布局关键技术点

响应式设计的核心是让同一套代码在不同设备上都有良好的显示效果。 重点难点&#xff1a; 断点设置&#xff1a;常见屏幕尺寸的断点划分策略弹性布局&#xff1a;Flexbox 和 Grid 的配合使用视口单位&#xff1a;vw、vh、vmin、vmax 的应用场景 /* 移动优先的响应式设计 */ .re…

作者头像 李华
网站建设 2026/10/15 2:06:05

教育领域创新尝试:图像识别辅助教学内容组织

教育领域创新尝试&#xff1a;图像识别辅助教学内容组织 技术背景与教育痛点 在当前数字化教学快速发展的背景下&#xff0c;教师和教育工作者面临海量教学资源的组织与管理难题。传统方式下&#xff0c;课件、习题、实验图示等图像类素材往往以文件名或手动标签进行归类&#…

作者头像 李华
网站建设 2026/10/14 21:12:37

鸿蒙智能家居控制App开发实战:从0到1

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个鸿蒙智能家居控制应用&#xff0c;要求&#xff1a;1) 支持控制灯光、空调、窗帘等设备 2) 实现设备发现和配对功能 3) 提供场景模式设置(如离家模式、睡眠模式) 4) 使用分…

作者头像 李华
网站建设 2026/10/15 4:56:10

NDK开发第一步:图解解决工具链缺失问题

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个面向新手的交互式学习应用&#xff0c;通过可视化方式解释NDK工具链的概念和作用。应用应包含&#xff1a;1) 图形化展示NDK目录结构&#xff0c;2) 工具链缺失问题的动画…

作者头像 李华
网站建设 2026/10/15 18:21:29

科研加速器:预装主流框架的AI实验环境

科研加速器&#xff1a;预装主流框架的AI实验环境 作为一名研究生&#xff0c;你是否也遇到过这样的困境&#xff1a;好不容易找到一篇优秀的物体识别论文想要复现&#xff0c;却因为配置作者使用的特殊框架版本而耗费大量时间&#xff1f;我曾经花了整整三天时间在环境配置上&…

作者头像 李华