当前位置: 首页 > 知识库问答 >
问题:

Logback和Spring Boot的新springProperty查找机制不工作

卢鸿彩
2023-03-14

我正在通过spring-cloud brixton.m2使用Spring Boot 1.3.0.rc1,并且无法将Spring Boot属性拉到logback.xml中,正如这个特性所暗示的,在日志配置中签入支持springProperty

我正在使用.yml文件,希望从bootstrap.yml或application.yml中提取应用程序名称。

logback-spring.xml:

<configuration>
      <springProperty scope="context" name="myappName" source="spring.application.name"/>
      <contextName>${myappName}</contextName>
      <appender name="logFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
         <file>logs/${myappName}.log</file>
         ... 
      </appender>
      ...
</configuration>

这里的Spring Boot Logback extensions文档帮助不大。

另一个stackoverflow问题不能在logback.xml中使用Spring属性占位符,这个问题比较老,对我也不适用。任何洞察力都会有帮助。

[INFO] +- org.springframework.boot:spring-boot-starter-web:jar:1.3.0.RC1:compile
[INFO] |  +- org.springframework.boot:spring-boot-starter:jar:1.3.0.RC1:compile
[INFO] |  |  +- org.springframework.boot:spring-boot:jar:1.3.0.RC1:compile
[INFO] |  |  +- org.springframework.boot:spring-boot-autoconfigure:jar:1.3.0.RC1:compile
[INFO] |  |  +- org.springframework.boot:spring-boot-starter-logging:jar:1.3.0.RC1:compile
[INFO] |  |  |  +- ch.qos.logback:logback-classic:jar:1.1.3:compile
[INFO] |  |  |  |  \- ch.qos.logback:logback-core:jar:1.1.3:compile
[INFO] |  |  |  +- org.slf4j:jcl-over-slf4j:jar:1.7.12:compile
[INFO] |  |  |  +- org.slf4j:jul-to-slf4j:jar:1.7.12:compile
[INFO] |  |  |  \- org.slf4j:log4j-over-slf4j:jar:1.7.12:compile
[INFO] |  |  \- org.yaml:snakeyaml:jar:1.16:runtime

共有1个答案

郎睿
2023-03-14

为未来的读者提供我的分析和解决方案...我尝试在bootstrap.yml中使用spring.application.name值,然后在application.yml中使用application.properties中使用spring.application.name值,但均无效。我以为是因为我使用了logback.xml,但是转换为logback-spring.xml没有任何改变。查看这里提交的代码,通过this.environment.getProperty(source)提取值取决于加载属性源的时间和解释logback-spring.xml文件的时间。不知道为什么Dave Syer能够让它工作,但我的.xml变量在将本地属性源添加到环境之前被填充了。

如果通过SpringApplication.SetDefaultProperties()设置该值,则该值将填充在.xml文件中。所以这就是我走的路。

  • 构建了SpringApplicationRunListener
  • SpringApplicationRunListener.Started()中,我通过new ClassPathResource(“/bootstrap.yml”)
  • 读取bootstrap.yml(其中所有框架用户都需要spring.application.name
  • 在基于值的HashMap中设置新属性service.log.name
  • 使用该HashMap调用了SpringApplication.SetDefaultProperties()
  • 然后,我可以在logback-spring.xml文件
  • 中使用 ${myappName}

我承认这不是一个完美的解决方案,但一个目前有效的,并可能继续在未来的Springboot发行版。我对进一步的想法持开放态度,但我想提供一个解决方案,为其他有相同经验的人工作。

 类似资料:
  • 我有Spring Boot应用程序,并在应用程序中设置。下一个变量的属性: 应用程序启动后正确创建日志文件。但是当我更改日志级别时,logback会创建名为“appName _ IS _ UNDEFINED-appVersion _ IS _ UNDEFINED”的新日志文件。我使用下一个回退配置: 无法理解如何解决它。

  • 我在我的模型中使用LocalDateTime,在包括LocalDateTimeDeserializer之后,将bean字段转换为 包括 属性在SpringBoot的应用程序中。属性文件,应用程序最终能够反序列化JSON并正确显示如下内容:, 但是,当我进行测试时,它会忽略WRITE_DATES_AS_TIMESTAMPS标志,我猜它会为上面相同的字符串日期生成一个输出, 请注意,在测试资源文件夹中

  • controller.java UserServiceImpl.java 我得到了这个错误 应用程序启动失败 描述: 我使用的SpringBoot版本:2.1.0.发行版

  • 我的spring应用程序有以下logback.xml配置。我使用的是SizeAndTimeBasedRollingPolicy,并且我假装在一个月(即部分)的基础上对日志进行原始化。 出于调试的目的,目前我正在生成大量日志,但totalSizeCap似乎不起作用。我有一个一月的文件夹,差不多有8GB。 我看到这个日志:SizeAndTimeBasedRollingPolicy not honori

  • 我正在学习Spring Boot来构建应用程序。我试图用不同包中的控制器作为应用程序来构建我的第一个Spring Boot应用程序。Tomcat实例出现,但请求没有到达为URI注册的RestController。 以下是控制器类: 以下是应用程序类: Pom.xml tomcat启动时的日志: 我添加了基本包扫描,甚至尝试了注释,但当我点击URL(http://localhost:8080/abc

  • 我在使用logstash-logback-encoder的Logback时遇到了问题。 我的logback.xml: 我试图在我的项目主页中创建日志/开发: 如果我删除文件“logback.xml”,日志记录就会工作,所以日志记录实际上会发生,但它不存储在文件中。