我设置了我的spring-boot应用程序以从配置服务器获取log4j2配置文件。但是查找不起作用。如果我将日志配置文件放在资源文件夹下,则可以正常工作。此外,如果文件位于配置服务器上,则监视间隔不起作用。
我的配置文件示例:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" monitorInterval="60">
<Appenders>
<Console name="ConsoleJSONAppender" target="SYSTEM_OUT">
<JSONLayout complete="false" compact="false" eventEol="true" properties="false" stacktraceAsString="true">
<KeyValuePair key="correlation-id" value="${ctx:CORRELATION_ID}" />
<KeyValuePair key="timestamp" value="${date:yyyy-MM-dd'T'HH:mm:ss.SSSZ}" />
</JSONLayout>
</Console>
</Appenders>
<Loggers>
<AsyncRoot level="info">
<AppenderRef ref="ConsoleJSONAppender" />
</AsyncRoot>
</Loggers>
</Configuration>
已从配置服务器正确加载配置,因为日志为json格式,但“ $ {date:yyyy-MM-dd'T'HH:mm:ss.SSSZ}”和“ $ {ctx:CORRELATION_ID}”不存在解决。再次,我想提及的是,如果配置文件位于资源文件夹下,则此方法有效。因此,这让我认为问题出在配置服务器上的配置文件上。如果文件在配置服务器上,查找有任何限制吗?
谢谢。
我假设您已经在https://github.com/apache/logging-log4j2/tree/release-2.x/log4j-spring-cloud-config/log4j-spring-cloud-config-samples中查看了示例项目?它同时具有示例客户端和带有本地存储库的示例Spring Cloud Config服务。如果查看服务器的config-repo目录中的示例log4j2.xml,您会注意到许多查找变量都以进行转义\${ctx:CORRELATION_ID}
。没有这个Spring,云配置将尝试使用它拥有的信息来解析变量,这不会太多。如果存在,转义字符将在配置被传递回Log4j时被Spring Cloud Config删除。
至于monitorInterval,当将它设置为SpringCloudConfig时,如果它是一个正值,则Log4j将在每个时间间隔对URL进行GET调用。如果收到未修改的响应,则什么都不会发生。如果收到配置,它将重新配置。如果monitorInterval为0,则Log4j将侦听来自Spring Cloud Bus的事件,该事件指示在请求配置时发生了更改。同样,如果返回“未修改”,则其他事件触发了该事件,并且配置将被保留。
为了使Spring Cloud Bus通知正常工作,需要将Spring Cloud Config配置为将事件推送到应用程序,并且需要将应用程序配置为使用与服务器使用的消息代理相同的类型侦听事件。最后,假设您使用的是Git,Spring Cloud Config服务器需要配置一个Web挂钩以侦听您的后备存储库中的事件。有关更多信息,请参阅https://cloud.spring.io/spring-cloud-config/multi/multi__push_notifications_and_spring_cloud_bus.html。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句