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

在log4j2.xml中使用Spring Boot应用程序属性

廖令
2023-03-14

我正在开发一个基于spring boot的web应用程序,希望使用log4j2作为记录器实现。
使用log4j2-spring.xml文件中定义的日志配置,一切都可以正常工作。

不起作用的地方:我想在log4j2-spring.xml文件中使用属性占位符,该占位符应该从用于配置Spring Boot的application.yml文件中定义的属性解析。

共有1个答案

仇正豪
2023-03-14

通过属性占位符直接替换log4j2-spring.xml中的属性是不可能的,因为log4j2-spring.xml不在Spring的范围内,并且纯粹用于配置目的。

但是,您可以利用log4j2开箱即用的属性替换特性,如本文所述。

步骤1-在log4j2-spring.xml中指定属性名称及其变量,如下所示

<Configuration status="warn">
    <Properties>
        <Property name="someProp">${bundle:test:someKey}</Property>
    </Properties> 
    <!--other configs -->
</Configuration>

步骤2-在日志配置中使用上面定义的属性,例如日志文件名的后缀

<Appenders>
    <File name="file" fileName="/path/to/logs/app-${someProp}.log">
        <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p %-40c{1.} - %m%n"/>
    </File>
</Appenders>

步骤3-创建一个包(即properties文件)来保存properties值,例如test.properties

# properties for log4j2
someKey=someValue
someKey1=someValue1

在您的情况下,该文件将包含您在log4j2配置中寻求使用的yaml中的值。如果在应用程序中也使用了这些属性,它们将在yaml和包(即属性文件)中重复,如果spring不能在log4j2配置中注入它们,这应该是可以接受的折衷方案。

如果需要更多的信息,请在评论中告知。

 类似资料:
  • 我在src/main/resources下创建了2个文件: 应用程序。属性 第一个具有从env变量中获取值的属性,而后者具有固定值。 根据这里的具体情况,我以这样的方式推出了Spring靴: 然而,不会产生任何影响,并且应用程序是局部的。属性似乎被忽略。 有什么提示吗?

  • 我正在尝试在我的Servlet 3.0 Web应用程序中使用Log4j2。即使按照官方留档配置了所有内容,我也无法看到日志。 这是我的web.xml: 我已将log4j2.xml文件放在WEB-INF/classes中: 这是我在类中调用logger的方式: 请告诉我我做错了什么。我甚至尝试过硬编码到log4j2的直接路径.xml,但仍然不起作用。

  • 我是kubernetes的新手,需要在openshift平台上使用k8s confimap将springboot应用程序的属性文件外部化。我已将属性文件保存在git repo中,作为“greeter.message=Spring Bootmyapplication.properties已在库伯内特斯上挂载为卷!”并使用“oc create confimap myconfig--from-file=

  • 我正在将一个非常基本的web应用程序部署到Google应用程序引擎。我使用的是Springboot,我可以在本地很好地运行应用程序,但当我部署到Google时,应用程序引擎不会启动实例。我在启动时配置了一个云SQL数据源。 我有云sql配置属性配置src/main/Resources/application.properties.App Engine似乎找不到这些属性,所以它无法正确设置Cloud

  • 我有Kafka Streams java应用程序启动并运行。我试图使用KSQL创建简单的查询,并使用Kafka流来实现复杂的解决方案。我希望将KSQL和Kafka流作为Java应用程序运行。 我打算通过https://github.com/confluentinc/ksql/blob/master/ksqldb-examples/src/main/java/io/confluent/ksql/em

  • 我已经为Postgresql启用了复制,并且正在使用PGPool进行负载平衡。 我在使用HikariCP甚至Apache DBCP连接到Postgres时遇到了问题。 在SpringBoot应用程序中有没有使用PGPool的方法? 请查找堆栈跟踪: 2018-08-10 10:20:19.124信息37879----[main]com.zaxxer.hikari.hikaridatasource: