[Springboot+Logback]已定义日志路径但仍生成了LOG_PATH_IS_UNDEFIEND文件夹之解决办法

2023-11-13

目录

1、问题描述

2、分析过程

3、解决办法

4、其他


1、问题描述

自己写练习项目的时候,在application.yml中定义了logging.file.path:

logging:
  file:
    path: ./logs

也在logback-spring.xml中配置了LOG_HOME:

<springProperty scope="context" name="LOG_HOME" source="logging.file.path" />

看起来没什么问题,但是启动项目后,出现了两个日志文件夹,其中一个是预先定义的logs文件夹,另一个则是LOG_HOME_IS_UNDEFINED:

 查看控制台的日志发现有一段日志信息比Spring boot的banner都更先出现:

感觉很奇怪。

2、分析过程

在网上找了半天资料,大部分说是logback启动早于spring boot,所以一开始未读取到application.yml中的LOG_HOME,转而创建了LOG_HOME_IS_UNDEFINED,在后续读到LOG_HOME后才在正确的路径输出日志。

但是俺其他的spring boot项目中并没有遇到过这种情况,所以感觉觉得这个说法不完全正确,猜测是这个项目中的某个依赖中的日志组件提前启动导致的这个问题,然后挨个排查,发现把这个依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-context</artifactId>
</dependency>

删除后就不会出现这个问题了。

原来是spring cloud的锅。然后又去stack overflow上查了下相关问题,发现有个老哥说了这么一段话:

During spring cloud's boostraping process, bootstrap.properties is loaded before application.properties. If we don't specify log.path in bootstrap.properties then can not find this path and logback creates an LOG_PATH_IS_UNDEFINED directory. After the bootstrap process logback is re-initialized with right configuration. Seems to be related to Spring cloud. 

这老哥的大概意思是:

spring cloud项目启动时会先读取bootstrap.properties中的配置,然后再去读取application.properties中的配置。如果bootstrap.properties没有配置LOG_HOME,那logback就去自己生成LOG_HOME_IS_UNDEFINED日志目录了。

看到这里解决方法也就出来了。 

3、解决办法

如果你是spring cloud项目,把logging.file.path的定义放到bootstrap.properties里去就行

非spring cloud项目不会去读取bootstrap.properties,如果还是出现了LOG_HOME_IS_UNDEFINED,那可能只是路径配置错了,仔细检查一下吧。

其他方案

看了下别人的解决办法,有些是推荐把logback-spring.xml的重命名一下,比如改成logback-custom.xml,然后在application.properties里面去指定日志的配置文件:

logging:
  config: classpath:logback-custom.xml

这样在spring cloud项目启动时无法自行找到并读取logback的配置文件,也就不会输出日志,直到读取application.properties之后才会去加载日志配置。

4、其他

又去查了下bootstrap.properties和application.properties的区别,下面是chatgpt老师的回答:

bootstrap.propertiesapplication.properties是Spring Boot应用程序中两个不同的配置文件。

bootstrap.properties文件是Spring Boot应用程序在启动时加载的第一个配置文件。这个文件通常包含一些应用程序的关键配置,比如连接到配置服务器的信息、配置日志框架等。在Spring Cloud应用程序中,bootstrap.properties文件通常用于配置Spring Cloud Config Server,用于从远程配置服务器中获取应用程序的配置信息。在Spring Boot应用程序中,bootstrap.properties文件的优先级高于application.properties

application.properties文件是应用程序的主要配置文件,包含了所有应用程序的配置信息,例如应用程序的端口号、数据库连接等。

总的来说,bootstrap.properties是启动应用程序所必需的配置,而application.properties是应用程序的运行配置。

小白受教了orz

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[Springboot+Logback]已定义日志路径但仍生成了LOG_PATH_IS_UNDEFIEND文件夹之解决办法 的相关文章

  • 将字符串转换为整数数组 String at = "1 2 3 4 5" 转换为 ar=[1,2,3,4,5]

    我正在读取一个字符串 作为一整行数字 用空格分隔 即1 2 3 4 5 我想将它们转换为整数数组 以便我可以操作它们 但这段代码不起作用 它说不兼容的类型 String str br readLine int array new int 4
  • 从 J2SE 5.0 学习 Java SE 6 有多难?

    我是新来的 我有一个简单的问题 希望有人能帮助我 我即将开始学习Java 正在寻找一本好的教材来使用 我发现 Y Daniel Liang 的 Java 编程入门 评价很高 但我想知道是否可以使用旧的第 6 版 2006 年 7 月 22
  • 如何正确地将MapStruct与Eclipse集成? (包括Lombok java代理)

    我愿意在一些官方项目中使用MapStruct 所以我决定先对其进行一些测试 我需要让它与 eclipse 集成工作 并遵循 MapStruct 网站上提供的所有说明 但是 到目前为止还没有运气 有人成功实现了这种整合吗 如果是的话我可以缺少
  • 从插件设置 Maven 属性

    我在这里阅读了一些关于如何从 Maven 插件设置属性的问题 其中大多数讨论了应用程序的版本号 似乎没有简单的方法可以做到这一点 我发现的最佳解决方案是拥有一个从插件更新的 filter properties 文件 并由主 pom 文件使用
  • 如何将 Struts 2 与 Velocity 和 Tiles 结合使用

    有人能够获得与 struts 2 一起使用的速度和图块吗 我在网上查找示例或教程时遇到一些问题 从我从邮件列表中收集到的信息来看 这似乎根本不可能 但邮件已经很旧了 https struts apache org docs tiles pl
  • 使用 Bouncy Castle 重建 ED25519 按键 (Java)

    Bouncy Castle 的最新 测试版 版本 bcprov jdk15on 161b20 jar 支持 ED25519 和 ED448 EC 加密以进行签名 我设置了这个完整的工作示例 它按预期工作 我的问题 我是否正确重建了私钥和公钥
  • Junit测试中LocalDateTime反序列化的问题

    我有问题LocalDateTime反序列化Junit测试 我有简单的REST API返回一些DTO目的 当我呼叫端点时 响应没有问题 它是正确的 然后我尝试编写单元测试 得到MvcResult并使用ObjectMapper将其转换为我的DT
  • Java OR 运算符优先级

    如何在 Java 中以 if 的方式链接条件语句b是假的 不如不检查c If a and c是假的 并且b是真的 确实c会被检查吗 if a b c 我正在寻找 PHP 所拥有的类似功能 但两者之间存在差异OR and 爪哇 如果左操作数是
  • 通过 Session.update 和 HibernateTemplate.merge 进行 Hibernate 更新的区别

    我看到了更新操作的类型 第一的 getHibernateTemplate execute new HibernateCallback public Object doInHibernate Session session session f
  • 使android listview布局可滚动

    我有一个 xml 文件 其布局为 ASCII 形式 ImageView TextView List
  • 堆内存与对象内存

    根据一篇关于Java内存和特性的论文 内存分数分为两种类型 堆内存 即应用程序在运行时消耗的内存 对象内存 即程序中使用的各种对象分配的内存 例如整数和字符串等 他们的意思是stack当他们说时的记忆object记忆 或者它们是什么意思 很
  • 如何从 Jackson 中的自定义解串器调用默认解串器

    我在杰克逊的自定义解串器有问题 我想访问默认序列化器来填充我要反序列化的对象 在填充之后 我将做一些自定义的事情 但首先我想使用默认的 Jackson 行为反序列化对象 这是我目前拥有的代码 public class UserEventDe
  • 在所有方法调用上允许类型见证有什么意义?

    假设我们有两种方法 如下所示 public static
  • 字节流和字符流

    请解释一下什么是字节流和字符流 这些究竟意味着什么 Microsoft Word 文档是面向字节的还是面向字符的 Thanks 流是一种顺序访问文件的方式 字节流逐字节访问文件 字节流适用于任何类型的文件 但不太适合文本文件 例如 如果文件
  • 如何在 Struts 2 中访问 OGNL 跟踪评估?

    有人告诉我要优化网络应用程序 为此 我使用JProfiler https www ej technologies com products jprofiler overview html 我注意到很大一部分响应时间都花在了表示层上 特别是当
  • 在 Struts 2 中使用单个文件标签上传多个文件

    我想使用单个 Struts 2 文件标签上传多个文件 就像在 Gmail 中一样 我们使用 CTRL 键来选择多个文件来附加多个文件 我知道如何上传多个文件 但我想使用单个文件标签 我在一个小画廊应用程序中上传多个文件 如果您的操作已设置为
  • 当键位于父类中时,如何将一对多集合映射到连接的子类

    我想将一对多集合映射到子类 但集合的键是父类的属性 目前我正在映射 AbstractFoo Foo 和 Bar 类 如下所示
  • 如何找到 JAR:/home/hadoop/contrib/streaming/hadoop-streaming.jar

    我正在练习有关 Amazon EMR 的复数视角视频教程 我被困住了 因为我收到此错误而无法继续 Not a valid JAR home hadoop contrib streaming hadoop streaming jar 请注意
  • JAVAFX 缩放、ScrollPane 滚动

    I have JAVAFX application with zoom and scale as described here Scale at pivot point in an already scaled node https sta
  • 如果垃圾收集器没有删除未引用的对象,它们还能运行吗?

    如果一个对象正在等待垃圾收集 但包含一个在该对象的最后一个引用更改时正在运行的线程 那么该线程是否仍会运行并且代码是否仍会执行 那么您是否可能有一堆应该删除的幽灵对象 但它们对您的代码产生了影响 你如何防止这种情况发生 有没有办法让对象知道

随机推荐

  • linux软连接显示broken link

    解决方案 sudo ln s 源文件 目标文件 注 两者必须为绝对路径
  • 关于测试用例

    测试专栏 软件测试的基本概念 关于软件测试 作为一个测试人员 这些基础知识必不可少 目录 一 测试用例的基本要素 1 什么是测试用例 2 为什么软件测试人员要写测试用例 二 测试用例的设计方法 1 基于需求设计测试用例 2 具体设计测试用例
  • docker制作镜像,导出导入本地镜像等初级指南

    首先安装 docker 1 prepare 更改 yum 源加快安装环境 添加下面 yum 源 docker ce stable name Docker CE Stable basearch baseurl https mirrors al
  • 当绘图遇上Caché之元数据代理

    很久以前到沈阳实习的时候还一个个问度娘C 画图 画了电路图绘制软件的毕业设计 雪花屏保等等 搞LIS软件后绘制各种仪器图 对C 画笔 画字符串 画线 画圆等等耳熟能详 然而却碰到一个问题 我们的仪器大部分是盒子用数据库M连接的 如果盒子仪器
  • micropython RX8025T 驱动简单演示

    我就知道可能八百年会有一位大哥来找这个驱动 让我来猜猜为啥用这个 嫌一般的RTC不够精准是吧 想用个带温度补偿的试试 代码拿去 其实巨简单的 没啥好说的 而且只有基本功能 from micropython import const impo
  • 容器的docker-compose怎样写agent.jar配置

    在 Docker Compose 文件中配置 Java Agent 例如 agent jar 的方式与之前的环境变量类似 您可以使用 environment 字段来设置 Java 环境变量 包括 javaagent 参数来指定 Java A
  • 【C++】string使用

    文章目录 1 为什么要学习string类 2 标准库中的string类 2 1了解string类 2 2string类常用的接口 2 2 1 构造和析构相关 2 2 2 迭代器 2 2 3 容量相关 2 2 4 元素访问 元素遍历 元素访问
  • 生命在于学习——未授权访问漏洞

    声明 本篇文章只是用于记载学习笔记 学习交流 不可用作其他违规用途 一 简介 未授权访问可以理解为需要安全配置或权限认证的地址 授权页面存在缺陷 导致其他用户可以直接访问 从而引发重要权限可被操作 数据库 网站目录等敏感信息泄露 目前主要存
  • 静态对象(全局+局部+静态对象成员)

    所有的静态对象 全局对象都于静态存储区分配 关于全局对象 是在main 函数执行前就分配好了的 其实 在main 函数中的显示代码执行之前 会调用一个由编译器生成的 main 函数 而 main 函数会进行所有全局对象的的构造及初始化工作
  • C++ auto遍历无法直接修改map的数据

    对于std map 当使用for auto it myMap 这种范围循环形式时 实际上是使用了const迭代器进行遍历 这意味着你无法通过该迭代器直接修改std map中的值 范围循环使用的是容器的begin 和end 函数返回的迭代器
  • 【数据结构--链表】反转链表

    题目描述 代码实现 Definition for singly linked list struct ListNode int val struct ListNode next struct ListNode reverseList str
  • JavaScript如何调用摄像头

    如何使用浏览器调用摄像头 在JavaScript中使用浏览器调用摄像头会使用到以下方法 navigator getUserMedia video true audio false success error 参数1 是一个对象包含摄像头和麦
  • 二叉树的重构

    二叉树的重构是指给定二叉树的先序遍历 中序遍历 后序遍历中的任意两者 要求恢复二叉树的结构 其中 除非二叉树是真二叉树 即任一节点要么具有两个子节点 要么没有子节点 否则 必须要有中序遍历才能恢复二叉树的结构 先序遍历 中序遍历 后序遍历
  • 寒假培训——简单搜索

    A 捉迷藏1 dfs bfs简单搜索 题目 Title A 捉迷藏1 Time Limit 1s Description 王吉吉和袁坑坑在一个n m大小的房间里捉迷藏 王吉吉躲起来了 现在袁坑坑要去抓他 地图中 W 代表王吉吉 Y 代表袁坑
  • STM32速成笔记—DMA

    文章目录 一 什么是DMA 二 DMA有什么作用 三 STM32的DMA 3 1 DMA请求 3 2 DMA通道 3 3 仲裁器 四 DMA配置 4 1 DMA配置步骤 4 2 DMA结构体成员 五 DMA配置程序 5 1 ADC1初始化程
  • 4行代码计算9999的阶乘

    转载自 http blog csdn net liangbch article details 3230428 本文来源于csdn2001年的一个帖子 题目是有谁可以用四行代码求出1000000的阶乘 见 http topic csdn n
  • MySQL数据库增删改查及安全值守操作

    我在本篇文章中整理了一些MySQL数据库 表 字段的增删改查和安全值守操作的常用语句 以便同学们保存和快捷查询 详细如下 1 用户的查看 创建 删除 以username为Superman password为123123为例 用户的创建cre
  • python模拟登录京东网页

    目标网站 京东网首页登录 目标网址 https www jd com 任务要求 1 导入selenium库 并使用该库驱动Chrom浏览器 完成请求 2 驱动浏览器对象 找到登录按钮 点击 3 在新页面中选择账号登录 4 找到用户名和密码输
  • Ubuntu 安装 Mysql【详细步骤】

    文章目录 主要内容 安装并设置 mysql 安装 mysql 设置 mysql 首次登录数据库 配置远程访问 修改配置文件 mysql 授予权限 重启 mysql 测试远程访问 建立访问连接 workbench 访问 workbench 增
  • [Springboot+Logback]已定义日志路径但仍生成了LOG_PATH_IS_UNDEFIEND文件夹之解决办法

    目录 1 问题描述 2 分析过程 3 解决办法 4 其他 1 问题描述 自己写练习项目的时候 在application yml中定义了logging file path logging file path logs 也在logback sp