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

如何在Logstash编码器中使用来自配置服务器的Spring环境值

贡斌
2023-03-14

我想使用Spring环境值作为Logback appender的Logstash编码器中的自定义域。

<property resource="logstash.properties" />
<springProperty name="appEnv" source="environment"/>
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
    <customFields>{"application.environment":"${appEnv}"</customFields>
</encoder>

它似乎在什么时候起作用

  • 该属性是本地和静态的(在配置时可用)
  • 该属性位于bootstrap.properties中

似乎在什么时候不起作用

    null

但是,我想知道是否还有一种方法可以坚持appender的XML配置,并在Spring环境准备就绪时以编程方式“重新加载”配置。我该怎么做?

我找到了这个答案来重新加载,但它对我的情况不起作用。appenv_is_undefined继续出现在日志文件中。

共有1个答案

龚睿
2023-03-14

我能够通过实现SpringApplicationContextInitializer来解决我的问题。

在调用的initialize方法中,我可以通过rootlogger访问我的Logback Appender和编码器。

Logger rootLogger = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
RollingFileAppender jsonFileAppender = (RollingFileAppender) rootLogger.getAppender(LOGSTASH_APPENDER_NAME);
LogstashEncoder encoder = (LogstashEncoder) jsonFileAppender.getEncoder();

从LogstashEncoder中,我可以获得自定义字段

String customFields = encoder.getCustomFields();
{"application.environment":"appEnv_IS_UNDEFINED"}
springEnvironment = applicationContext.getEnvironment();

令人惊讶的是,我不需要重新加载或重启任何东西。只需在编码器上设置固定的自定义字段就足够了。紧随其后,日志消息包含正确的值。

encoder.setCustomFields(fixedCustomFields);

有了这个初始化器,我就可以在logback-spring.xml或包含的文件中完全配置我的appender和LogstashEncoder。

 类似资料:
  • 我这样配置Spring Cloud Config服务器: 由于某些原因,resolvePlaceholders不适用于JSON表示,因此服务器配置客户机需要知道服务器上配置的所有ENV变量。 是否可以强制JSON表示resolvePlaceholders与纯文本(属性)表示相同?

  • 我需要为不同的环境加载属性,如DEV、QA和我为每个环境都有不同的属性文件。因此,我通过在服务器中设置environment属性并访问该值以加载相应的属性文件来解决这一问题。在谷歌搜索时,我发现spring环境配置文件提供了类似场景的解决方案。然而,即使在这里,我也必须将服务器中的active-profile变量设置为环境变量。 与本机方法相比,使用spring环境配置文件有什么好处?

  • 问题内容: 我在这里得到了很多人的帮助,现在我想回馈。对于那些使Node.js服务器无法与MongoDB一起使用的问题,这就是我所做的。 问题答案: 这最初是由问题提问者发布的。 一个mod在评论中要求他将其发布为答案,但未得到任何回应。因此,我清理了它并亲自发布。 查看代码时,您会注意到该代码位于内部。如果您将其撤消,它将不起作用。另外, 请勿关闭 数据库连接。否则,在第一次之后,数据库连接将不

  • 我正在使用Eclipse Juno,并且通过windows安装程序在我的PC中安装了Apache Tomcat/8.0.0-RC5。当我尝试在Eclipse中定义新服务器时,在Apache下,我没有Tomcat v8.0选项。它在Tomcat v7.0停止。如何让Apache Tomcat v8.0在Eclipse中运行?

  • 我一直在尝试掌握位于此处的spring boot config服务器:https://github.com/spring-cloud/spring-cloud-config在更彻底地阅读了文档之后,我能够解决我的大部分问题。然而,我不得不为基于文件的PropertySourceLocator编写一个额外的类 然后我将其添加到ConfigServiceBootstrapConfiguration.j

  • 我正在使用Spring Cloud Config服务器,能够检测来自git存储库的更改并将其传递给配置客户机。 有两种方法,我已经实现了: null 所以两者都工作得很好,那么使用Spring Cloud Bus有什么好处吗?或者在生产环境中,不使用Spring Cloud Bus会有什么问题吗?因为将需要额外的工作来设置RabbitMQ集群(HA)作为生产中的Spring云总线。 谢谢,大卫