springcloud动态加载日志路径和log.path_IS_UNDEFINED目录问题

多模块工程中通常需要将不同模块服务的日志输出到指定的目录,日志目录结构如下:

- logs
    - app1
    - app2
    - ...

基于上述需要,需要在logback-spring.xml中动态读取application.yml(或者application.properties)的日志路径配置。解决步骤如下:

(1)在application.yml(或者application.properties)中增加配置如下内容:

logging:
  file:
    path: logs/${spring.application.name}

(2)在logback-spring.xml直接通过${LOG_PATH}使用配置的日志路径,因为LOG_PATH为内置变量,默认映射的变量为logging.file.path。

<appender name="FILE_ALL" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <encoder>
        <pattern>${FILE_LOG_PATTERN}</pattern>
    </encoder>
    <file>${LOG_PATH}/all.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
        <fileNamePattern>${LOG_PATH}/all.log.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
        <maxFileSize>${LOG_FILE_MAX_SIZE:-30MB}</maxFileSize>
        <maxHistory>${LOG_FILE_MAX_HISTORY:-1}</maxHistory>
    </rollingPolicy>
</appender>

完成上述配置工作,app1的日志就会输出到当前工程下的logs/app1/all.log文件中。但是,当前工程下会出现一个类似log.path_IS_UNDEFINED的目录,也有all.log日志文件,但是打开日志文件发现内容只有springboot启动前的日志信息,如下图所示,红框中的内容。

原因是springboot启动前未加载到application.yml(或者application.properties)中的路径配置信息,之前的日志就会输出到xxx_IS_UNDEFINED的目录中。

解决方案:在logback-spring.xml中增加一个属性,内容如下:

<property name="LOG_PATH" value="${LOG_PATH:- }"/>        //-后面是空格,千万不能错

关于${LOG_PATH:- }的理解请参考:https://www.cnblogs.com/fanxia/p/14079495.html#log_path--%E7%90%86%E8%A7%A3

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萧十一郎君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值