我们的应用程序被部署为多个客户上下文下的多个 tomcat 服务器的 servlet 战争:
customer#application.war
我们使用 log4j2 作为我们的日志记录和警报电子邮件机制。到目前为止,一切正常,我们的致命错误正在发送。然而,当我们部署到新的环境时,越来越不清楚是哪个客户产生了错误。
到目前为止,主题值似乎是静态的,并在配置文件中设置,并且在构建记录器时加载了系统变量:
subject="[${applicationname}] Fatal Error ${hostname}:${sys:pwd}"
虽然似乎有一种方法可以通过 servlet API 确定我们部署的上下文的名称,但我们还没有确定如何在运行时以编程方式和动态地在电子邮件主题中引入这个值。
这将大大减少研究错误所需的时间。有小费吗?
到目前为止,我们已经考虑了以下内容:
- 针对每个客户上下文的自定义 log4j2 配置的自定义战争文件(非常hackish)
- 更新所有 log.fatal 调用以包含来自 servlet 的上下文信息(可怕)
- 自定义 SmtpAppender(最终的和受保护的,所以就出来了)
- 自定义 SmtpManager 并覆盖 MimeMessage 对象中的主题(似乎可行但文档未显示如何实现)
蒂亚!!
皮科