log4j - 将 Build Id 添加到 MDC 无法正常工作
问题描述
我目前正在尝试创建一个 TeamCity 插件以将其添加到BuildId
MDC 中,然后在"teamcity-agent-log4j.xml"
文件中访问它。
起初它正在工作,但后来我意识到它BuildId
并不总是在所有日志中都是正确的。在前两个版本中,我有权利BuildId
,但之后并不总是正确的。这是一个内部版本号为 4 的示例。它似乎保存了一些旧的 MDC,内部版本号为 3 和 2(在 INFO | 之后可见):
[2021-08-10 17:27:27,580] INFO | 4 | Testteamcity_Build - ----------------------------------------- [ Step 'TestStep (Command Line)' (simpleRunner), Build "Testteamcity / Build" #4 {id=4, buildTypeId='Testteamcity_Build'} ] -----------------------------------------
[2021-08-10 17:27:27,582] INFO | 4 | Testteamcity_Build - Starting "/opt/buildagent/temp/agentTmp/custom_script400763139097935001" in directory "/opt/buildagent/work/903868f2c04f952a"
[2021-08-10 17:27:27,585] INFO | 3 | Testteamcity_Build - test
[2021-08-10 17:27:27,585] INFO | 2 | Testteamcity_Build - Process exited with code 0
代理中的.java
文件如下所示(没有导入):
public class AppAgent extends AgentLifeCycleAdapter {
public AppAgent(EventDispatcher<AgentLifeCycleListener> events) {
events.addListener(this);
}
@Override
public void buildStarted(@NotNull AgentRunningBuild runningBuild) {
MDC.clear();
MDC.put("BuildId", String.valueOf(runningBuild.getBuildId()));
MDC.put("BuildConfigurationId", runningBuild.getBuildTypeExternalId());
}
@Override
public void buildFinished(@NotNull AgentRunningBuild build, @NotNull BuildFinishedStatus buildStatus)
{
MDC.clear();
}
}
"log4j.xml"
以及我访问这些值的文件的一小部分:
<appender name="ROLL.BUILD" class="jetbrains.buildServer.util.TCRollingFileAppender">
<param name="file" value="${teamcity_logs}/teamcity-build.log"/>
<param name="maxBackupIndex" value="1"/>
<layout class="jetbrains.buildServer.log.MessagesFilterLayout">
<param name="ConversionPattern" value="[%d] %6p | %X{BuildId} | %X{BuildConfigurationId} - %m%n"/>
</layout>
</appender>
我正在清除并在 MDC 中添加新值,因此它应该可以工作,但事实并非如此。你知道我做错了什么吗?
解决方案
推荐阅读
- r - 数据表中最常见的
- javascript - 从特定数据重新排序数组
- javascript - 等待 DOM 元素然后做出反应 - Reactjs
- debugging - 正确使用 DEBUG_NEW
- python - 如何在 Tkinter 中格式化来自 Text Widget 的文本输入
- ansible - 如何为 ansible 变量提供选项卡空间
- http - Google Cloud Text to Speech - 为什么通过 Go 客户端库和 REST API 的请求之间存在延迟差异?
- doctrine-orm - 如何在 TYPO3 中注册 DQL 函数
- weblogic - 如何启用 Weblogic 托管服务器 ResolveDNSName?
- angular - 重新排序视图的子项。Nativescript Angular