gpt4 book ai didi

java - 来自 Logback 的电子邮件,其中包含从 App.properties 文件读取的变量值

转载 作者:行者123 更新时间:2023-12-01 22:08:35 25 4
gpt4 key购买 nike

我的要求是,如果我的应用程序和电子邮件主题中发生任何错误,则从 Logback.xml 文件发送电子邮件:我需要发送来自 Application.properties 文件的值,该文件再次由外部源填充。

在下面的代码中:如果我将 spring.app.url 和 spring.app.name 保持不变(取消注释 application.properties 文件中的前 2 行并注释掉最后 2 行):我能够实现我的要求,但一旦我尝试获取此值来自环境变量:它不会在电子邮件中发送值(尽管它在我的类中正确打印它)

LoggingTest 类文件:

@RestController
public class LoggingTest {
Log logger = LogFactory.getLog(LoggingTest.class);


@Value("${spring.app.url}")
String environmentUrl;

@Value("${spring.app.name}")
String appName;

@RequestMapping("/")
public String Home() {
System.out.println("Test environmentUrl : " + environmentUrl);
System.out.println("Test appName : " + appName);
logger.error("Error Occured : Send EMail");

return "Hello";
}}

Application.properties 文件:

#spring.app.url="Dummy Application URL"
#spring.app.name="Dummy Application Name"
spring.app.url=${vcap.services.<ServiceName>.credentials.url}
spring.app.name=${vcap.application.name}

Logback.xml 文件:

<configuration>
<property resource="application.properties" />
<appender name="errMailer" class="ch.qos.logback.classic.net.SMTPAppender">
<smtpHost>host values</smtpHost>
<smtpPort>port number</smtpPort>
<from>abc@xyz.com</from>
<to>abc@xyz.com</to>
<subject>App-Name : ${spring.app.name}</subject>
<layout class="ch.qos.logback.classic.html.HTMLLayout"/>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
</appender>
<root level="ERROR">
<appender-ref ref="errMailer" />
</root>
</configuration>

最佳答案

logback 的属性解析器与 springs 解析器不同。后者还解析值部分中的变量引用,而 logback 解析器则不会。

因此,您应该在 Spring 环境加载后在启动时通过代码重新配置 logback Appender,例如:

@Component
public class MyBean
{
@Autowired
private Configuration myEnv;

@EventListener
public void onAppStart(ContextRefreshedEvent event)
{
// re-configure here your logback appender
String value = myEnv.get("spring.app.name");
appender.setSubject(value);
}
}

Spring初始化后,会调用一个具有形参ContextRefreshedEvent的EventListener。

关于java - 来自 Logback 的电子邮件,其中包含从 App.properties 文件读取的变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58673999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com