This is an automated email from the ASF dual-hosted git repository.

kaxilnaik pushed a commit to branch v3-1-test
in repository https://gitbox.apache.org/repos/asf/airflow.git

commit 2f35605d942b80e737f23ebacc77eff71e8f706c
Author: Ash Berlin-Taylor <[email protected]>
AuthorDate: Wed Sep 10 23:00:25 2025 +0100

    Make the "Toggle Source" log display only hide source fields, not all 
fields (#55474)
    
    (cherry picked from commit 224b50c411d63b3892887024c8dd0f2c02ba31e6)
---
 .../ui/src/components/renderStructuredLog.tsx      | 25 ++++++++++++++--------
 .../ui/src/pages/TaskInstance/Logs/Logs.test.tsx   |  2 +-
 2 files changed, 17 insertions(+), 10 deletions(-)

diff --git a/airflow-core/src/airflow/ui/src/components/renderStructuredLog.tsx 
b/airflow-core/src/airflow/ui/src/components/renderStructuredLog.tsx
index 2ad930cc9bb..f56c8072897 100644
--- a/airflow-core/src/airflow/ui/src/components/renderStructuredLog.tsx
+++ b/airflow-core/src/airflow/ui/src/components/renderStructuredLog.tsx
@@ -92,6 +92,8 @@ const addLinks = (line: string) => {
   return elements;
 };
 
+const sourceFields = ["logger", "chan"];
+
 export const renderStructuredLog = ({
   index,
   logLevelFilters,
@@ -182,16 +184,21 @@ export const renderStructuredLog = ({
     </chakra.span>,
   );
 
-  if (showSource) {
-    for (const key in reStructured) {
-      if (Object.hasOwn(reStructured, key)) {
-        elements.push(
-          ": ",
-          <chakra.span color={key === "logger" ? "fg.info" : undefined} 
key={`prop_${key}`}>
-            {key === "logger" ? "source" : 
key}={JSON.stringify(reStructured[key])}
-          </chakra.span>,
-        );
+  for (const key in reStructured) {
+    if (Object.hasOwn(reStructured, key)) {
+      if (!showSource && sourceFields.includes(key)) {
+        continue; // eslint-disable-line no-continue
       }
+      const val = reStructured[key] as boolean | number | object | string | 
null;
+
+      elements.push(
+        " ",
+        <chakra.span color="fg.info" key={`prop_${key}`}>
+          {key === "logger" ? "source" : key}
+        </chakra.span>,
+        // Let strings, ints, etc through as is, but JSON stringify anything 
more complex
+        `=${val instanceof Object ? JSON.stringify(val) : val}`,
+      );
     }
   }
 
diff --git 
a/airflow-core/src/airflow/ui/src/pages/TaskInstance/Logs/Logs.test.tsx 
b/airflow-core/src/airflow/ui/src/pages/TaskInstance/Logs/Logs.test.tsx
index 4b608ca6bbb..b8c387485e2 100644
--- a/airflow-core/src/airflow/ui/src/pages/TaskInstance/Logs/Logs.test.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/TaskInstance/Logs/Logs.test.tsx
@@ -64,7 +64,7 @@ describe("Task log grouping", () => {
     );
 
     const summarySource = screen.getByTestId(
-      'summary-Log message source details: 
sources=["/home/airflow/logs/dag_id=tutorial_dag/run_id=manual__2025-02-28T05:18:54.249762+00:00/task_id=load/attempt=1.log"]',
+      'summary-Log message source details 
sources=["/home/airflow/logs/dag_id=tutorial_dag/run_id=manual__2025-02-28T05:18:54.249762+00:00/task_id=load/attempt=1.log"]',
     );
 
     expect(summarySource).toBeVisible();

Reply via email to