This is an automated email from the ASF dual-hosted git repository. heneveld pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git
commit 2f2a36d07094bf0b91c032e8e629f67e21c4821b Author: Alex Heneveld <[email protected]> AuthorDate: Fri Sep 10 01:41:23 2021 +0100 restore MDC logging context to previous value after task ends --- .../util/core/task/BasicExecutionManager.java | 32 +++++++++++++++------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionManager.java b/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionManager.java index 5e33b61..e59e9ed 100644 --- a/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionManager.java +++ b/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionManager.java @@ -130,6 +130,7 @@ public class BasicExecutionManager implements ExecutionManager { Task task; MDC.MDCCloseable taskMdc=null, entityMdc=null; + String prevTaskMdc, prevEntityMdc; private BrooklynTaskLoggingMdc() {} @@ -141,6 +142,19 @@ public class BasicExecutionManager implements ExecutionManager { public BrooklynTaskLoggingMdc start() { Entity entity = BrooklynTaskTags.getTargetOrContextEntity(task); + // set context _before_ the log so that context shows this task as starter; + // the log _message_ shows who submitted it, which is more reliable than + // the prevTaskMdc as we might be in a different thread and/or the prevTaskMdc + // can misleadingly point point to the task which triggered the executor + if (task!=null) { + prevTaskMdc = MDC.get(LOGGING_MDC_KEY_TASK_ID); + taskMdc = MDC.putCloseable(LOGGING_MDC_KEY_TASK_ID, task.getId()); + } + if (entity != null) { + prevEntityMdc = MDC.get(LOGGING_MDC_KEY_ENTITY_IDS); + entityMdc = MDC.putCloseable(LOGGING_MDC_KEY_ENTITY_IDS, "[" + entity.getApplicationId() + "," + entity.getId() + "]"); + } + if (BrooklynLoggingCategories.TASK_LIFECYCLE_LOG.isDebugEnabled() || BrooklynLoggingCategories.TASK_LIFECYCLE_LOG.isTraceEnabled()){ String taskName = task.getDisplayName(); String message = "Starting task " + task.getId() + @@ -154,14 +168,6 @@ public class BasicExecutionManager implements ExecutionManager { } - // set context _after_ the log so that context shows which task started this - if (task!=null) { - taskMdc = MDC.putCloseable(LOGGING_MDC_KEY_TASK_ID, task.getId()); - } - if (entity != null) { - entityMdc = MDC.putCloseable(LOGGING_MDC_KEY_ENTITY_IDS, "[" + entity.getApplicationId() + "," + entity.getId() + "]"); - } - return this; } @@ -172,8 +178,14 @@ public class BasicExecutionManager implements ExecutionManager { UNINTERESTING_TASK_NAMES.contains(taskName) ? BrooklynLogging.LoggingLevel.TRACE : BrooklynLogging.LoggingLevel.DEBUG, "Ending task {}", task.getId()); } - if (entityMdc != null) entityMdc.close(); - if (taskMdc != null) taskMdc.close(); + if (entityMdc != null) { + entityMdc.close(); + if (prevEntityMdc!=null) MDC.put(LOGGING_MDC_KEY_ENTITY_IDS, prevEntityMdc); + } + if (taskMdc != null) { + taskMdc.close(); + if (prevTaskMdc!=null) MDC.put(LOGGING_MDC_KEY_TASK_ID, prevTaskMdc); + } } public void close() {
