日志路径未定义

  • 环境:Spring boot + logback
  • 配置文件:
    <configuration>
    <springProfile name="dev">
    <property name="LOGHOME" value="/logdir/dir"></property>
    </springProfile>
    <appender name="syslog"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <File>${LOG
    HOME}/sys.log
    <encoder>
    <pattern>
    %d{yyyy-MM-dd HH:mm:SSS} %p [%thread] (%file:%line)- %m%n
    </pattern>
    <charset>UTF-8</charset>
    </encoder>
    </appender>
  • 问题:
    • 描述:微服务项目启动时,项目src同级目录下会新建一个以日志路径变量名为命名的文件夹。例如上面File标签中的<File>LOG_HOME。
    • 原因:logback先于Spring boot初始化(可以打开logback的debug查看项目初始化日志),logback初始化时会去查找LOG_HOME变量的值,但是上面的配置<springProfile>标签已经决定了该LOG_HOME的值由Spring来解析,所以先行初始化的logback找不到该变量的值,导致出现上面描述的情况。
    • 补充:虽然logback在项目刚刚启动时,没有找到LOG_HOME的值,但是当Spring Boot初始化到文件解析出LOG_HOME的值时,LOG_HOME的值不再是IS_UNDEFINED的了,而是上面定义的我们想要的路径。
    • 分析:据stackoverflow上的大神,logback不支持文件的懒加载(其实这个问题想都不用想,spring boot都开始加载了,logback怎么能不先初始化?)。我们这里的问题其实是因为动态改变导致的:开发在windows环境,部署在Linux环境,这就要求开发和生产环境的日志不在相同的路径,但是如果不依赖Java代码,logback是无法在xml文件中动态解析变量值的。
  • 解决方案:
    • 方案1:实现logback的接口,从文件中动态加载变量值,比如我们的application.yml文件里的环境属性dev、prod,以这些值为条件为logback的context添加变量LOG_HOME,及对应的值。这种方案,要新增logback相关代码,并且要在spring boot加载前执行,非常不好!
    • 方案2:添加额外的jar包,在xml文件中进行条件判断。这种方案太麻烦了,xml文件新增好几倍。
    • 方案3:在上面的文件中新增一个 <property name="LOG_HOME" value = "logdir">属性,作为logback初始化时LOG_HOME变量的默认值。这个默认值推荐采用部署服务器上的路径。这种方案最简单,成本最低:没有方案1的代码污染,没有方案2的jar包引入和一大堆xml标签。【最佳实践】

Spring boot+ logback环境下,日志存放路径未定义的问题的更多相关文章

  1. Spring Boot Logback几种日志详解

    日志对于应用程序来说是非常重要的,Spring框架本身集成了不少其他工具,我们自身的应用也会使用到第三方库,所以我们推荐在Spring应用中使用SLF4J/Logback来记录日志. SLF4J与Lo ...

  2. Spring Boot Logback日志配置

    logback的使用: Logback的默认配置 如果配置文件 logback-test.xml 和 logback.xml 都不存在,那么 logback 默认地会调用BasicConfigurat ...

  3. Spring Boot Logback应用日志

    e Spring Boot Logback应用日志 2015-09-08 19:57 7673人阅读 评论(0) 收藏 举报 . 分类: Spring Boot(51) . 目录(?)[+] 日志对于 ...

  4. Spring Boot系列一:默认日志logback配置解析

    前言 今天来介绍下Spring Boot如何配置日志logback,我刚学习的时候,是带着下面几个问题来查资料的,你呢 如何引入日志? 日志输出格式以及输出方式如何配置? 代码中如何使用? 正文 Sp ...

  5. Spring Boot - Logback配置日志要考虑哪些因素

    Spring Boot - Logback配置日志 出于性能等原因,Logback 目前是springboot应用日志的标配: 当然有时候在生产环境中也会考虑和三方中间件采用统一处理方式.@pdai ...

  6. Spring boot——logback 基础使用篇(一)

    1 简单日志配置 spring boot内部使用Commons Logging来记录日志,但也保留外部接口可以让一些日志框架来进行实现,例如Java Util Logging,Log4J2还有Logb ...

  7. Spring Boot logback

    前言 今天来介绍下spring Boot如何配置日志logback,我刚学习的时候,是带着下面几个问题来查资料的,你呢 如何引入日志? 日志输出格式以及输出方式如何配置? 代码中如何使用? 正文 Sp ...

  8. Spring Boot 学习摘要--关于日志框架

    date: 2020-01-05 16:20:00 updated: 2020-01-08 15:50:00 Spring Boot 学习摘要--关于日志框架 学习教程来自:B站 尚硅谷 1. 关于日 ...

  9. hadoop之 hadoop日志存放路径

    环境:[root@hadp-master hadoop-2.7.4]# hadoop versionHadoop 2.7.4 Hadoop的日志大致可以分为两类: (1).Hadoop系统服务输出的日 ...

随机推荐

  1. [BZOJ 2759] 一个动态树好题

    [BZOJ 2759] 一个动态树好题 题目描述 首先这是个基环树. 然后根节点一定会连出去一条非树边.通过一个环就可以解除根的答案,然后其他节点的答案就可以由根解出来. 因为要修改\(p_i\),所 ...

  2. 禅道Bug等级划分标准

    一.严重程序 P1:致命(该问题在测试中较少出现,一旦出现应立即中止当前版本测试) 阻碍开发或测试工作的问题:造成系统崩溃.死机.死循环,导致数据库数据丢失, 与数据库连接错误,主要功能丧失,基本模块 ...

  3. [python] A*算法基于栅格地图的全局路径规划

    # 所有节点的g值并没有初始化为无穷大 # 当两个子节点的f值一样时,程序选择最先搜索到的一个作为父节点加入closed # 对相同数值的不同对待,导致不同版本的A*算法找到等长的不同路径 # 最后c ...

  4. [matlab] 3.矩阵

    matlab矩阵运算很强大 ,几乎所有涉及矩阵运算的命令都有. 事实上,matlab里面所有变量都是以矩阵的形式保存下来的.   %% >> x=[1:2.1:10] x = 1.0000 ...

  5. 转://Oracle Golden Gate 概念和原理

    引言:Oracle Golden Gate是Oracle旗下一款支持异构平台之间高级复制技术,是Oracle力推一种HA高可用产品,简称“OGG”,可以实现Active-Active 双业务中心架构 ...

  6. 【window】git安装教程

    相关链接:https://blog.csdn.net/nly19900820/article/details/73379854 作者:smile.轉角 QQ:493177502

  7. 在新建的python3环境下运行jupyter失败的原因

    在deeplearning中再运行jupyter notebook就出现了错误: (deeplearning) userdeMBP:~ user$ jupyter notebook -bash: ju ...

  8. adaboost-笔记(1)

    1 - 加法模型 加法模型,就是通过训练集不断的得到不同的分类器(回归),然后将这些分类器组合成一个新的分类器的过程. 假设有\(N\)个样本,且我们的加法模型如下: \[f(x)=\sum_{m=1 ...

  9. TMS-规划图

    规划图 规划图 规划图 规划图 规划图 规划图 规划图 规划图 规划图 规划图 规划图 规划图 规划图 规划图 规划图 规划图 规划图 规划图 规划图 规划图 规划图 规划图 规划图 规划图 规划图 ...

  10. 史上最全面的Neo4j使用指南

    Neo4j图形数据库教程 Neo4j图形数据库教程 第一章:介绍 Neo4j是什么 Neo4j的特点 Neo4j的优点 第二章:安装 1.环境 2.下载 3.开启远程访问 4.测试 第三章:CQL 1 ...