日志路径未定义

  • 环境: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. nginx + uwsgi 部署 Django+Vue项目

    nginx + uwsgi 部署 Django+Vue项目 windows 本地 DNS 解析 文件路径 C:\Windows\System32\drivers\etc 单机本地测试运行方式,调用dj ...

  2. linux学习笔记整理(二)

    第三章 Linux基本命令操作本节所讲内容:3.1 Linux终端介绍 Shell提示符 Bash Shell基本语法3.2 基本命令的使用:ls.pwd.cd.history3.3 查看系统和BIO ...

  3. 配置数据库方言——hibernate

    RDBMS 方言 DB2 org.hibernate.dialect.DB2Dialect DB2 AS/400 org.hibernate.dialect.DB2400Dialect DB2 OS3 ...

  4. localhost和127.0.0.1及ip区别

    1.127.0.0.1是回送地址,指本地机,一般用来测试使用.回送地址是本机回送地址(Loopback Address),即主机IP堆栈内部的IP地址,主要用于网络软件测试以及本地机进程间通信,无论什 ...

  5. 5.06-re

    import re # 贪婪模式 从开头匹配到结尾 默认 # 非贪婪 one = 'mdfsdsfffdsn12345656n' two = "a\d" pattern = re. ...

  6. jenkins使用2----基本实例

    一.配置 1.点击新建,选择构建自由风格 2.剩下的都不动,来到构建步骤,新增一个输出hell world 3.保存后点击立即构建 二.查看日志 4.点击构建历史,再点击控制台输出 5.第三行显示 临 ...

  7. centos 7 安装 MySQL 5.6

    由于Centos7 默认数据库是mariabd,所以通过rpm安装MySQL需要卸载原有的Mariabd,再下载所有的依赖包比较麻烦且容易出错.通过yum的方式安装.yum其实是rpm的一个升级将所有 ...

  8. 使用 OAuth2-Server-php 搭建 OAuth2 Server

    Yii 有很多 extension 可以使用,在查看了 Yii 官网上提供的与 OAuth 相关的扩展后,发现了几个 OAuth2 的客户端扩展,但是并没有找到可以作为 OAuth2 Server 的 ...

  9. git branch 分支操作

    一.git分支命令 Git鼓励大量使用分支: 查看分支:git branch 创建分支:git branch <name> 切换分支:git checkout <name> 创 ...

  10. FineUI经典项目展示(1)生产在线管理系统

    本系列<FineUI经典项目展示>文章将会集中展示一批使用FineUI(开源版).专业版.MVC版的经典项目. 如果你希望自己的FineUI项目出现在这个舞台,请到官网论坛提交申请: ht ...