From 8e69c8de6da68b79a966fa3d4550e0ef64006274 Mon Sep 17 00:00:00 2001 From: Paul Kathmann Date: Tue, 27 Jan 2026 16:56:00 -0500 Subject: [PATCH 1/4] draft --- compute_modules/logging/common.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/compute_modules/logging/common.py b/compute_modules/logging/common.py index cccda8e..2195599 100644 --- a/compute_modules/logging/common.py +++ b/compute_modules/logging/common.py @@ -15,6 +15,7 @@ import json import logging +import os import threading from datetime import datetime, timezone from typing import TYPE_CHECKING, Any, Dict, MutableMapping, Optional, Tuple, Union @@ -51,7 +52,10 @@ def format(self, record: Any) -> str: "origin": f"{record.filename}:{record.lineno}", "safe": True, "thread": threading.current_thread().name, + "sessionId": getattr(record, "session_id", ""), "message": formatted_message, + "params": getattr(record, "params", {}), + "unsafeParams": getattr(record, "unsafeParams", {}), } return json.dumps(log_entry) @@ -118,9 +122,12 @@ def process(self, msg: Any, kwargs: MutableMapping[str, Any]) -> Tuple[Any, Muta custom_data = { "process_id": str(get_thread_local_data("process_id", "-1")), "job_id": str(get_thread_local_data("job_id", "")), + "session_id": os.environ.get("COMPUTE_SESSION_ID", ""), } kwargs["extra"] = kwargs.get("extra", {}) kwargs["extra"].update(custom_data) + kwargs["extra"]["params"] = custom_data + kwargs["extra"]["unsafeParams"] = custom_data return msg, kwargs From 8ca0a17b77d5df5082b20c3b2dd6ee146ffb9a36 Mon Sep 17 00:00:00 2001 From: Paul Kathmann Date: Tue, 27 Jan 2026 18:36:37 -0500 Subject: [PATCH 2/4] move custom data to params field --- compute_modules/logging/common.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/compute_modules/logging/common.py b/compute_modules/logging/common.py index 2195599..b3c839e 100644 --- a/compute_modules/logging/common.py +++ b/compute_modules/logging/common.py @@ -52,10 +52,8 @@ def format(self, record: Any) -> str: "origin": f"{record.filename}:{record.lineno}", "safe": True, "thread": threading.current_thread().name, - "sessionId": getattr(record, "session_id", ""), - "message": formatted_message, "params": getattr(record, "params", {}), - "unsafeParams": getattr(record, "unsafeParams", {}), + "message": formatted_message, } return json.dumps(log_entry) @@ -127,7 +125,6 @@ def process(self, msg: Any, kwargs: MutableMapping[str, Any]) -> Tuple[Any, Muta kwargs["extra"] = kwargs.get("extra", {}) kwargs["extra"].update(custom_data) kwargs["extra"]["params"] = custom_data - kwargs["extra"]["unsafeParams"] = custom_data return msg, kwargs From b5033ef98c4cfb73d00e5d2f868517d3c5102e78 Mon Sep 17 00:00:00 2001 From: Paul Kathmann Date: Tue, 27 Jan 2026 18:42:45 -0500 Subject: [PATCH 3/4] remove pid and job id from message string (already in params) --- compute_modules/logging/common.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compute_modules/logging/common.py b/compute_modules/logging/common.py index b3c839e..b1edadd 100644 --- a/compute_modules/logging/common.py +++ b/compute_modules/logging/common.py @@ -30,7 +30,7 @@ else: _LoggerAdapter = logging.LoggerAdapter -DEFAULT_LOG_FORMAT = "PID: %(process_id)-6s JOB: %(job_id)-36s - %(message)s" +DEFAULT_LOG_FORMAT = "%(message)s" DEFAULT_LOG_STRING_FORMATTER = logging.Formatter(DEFAULT_LOG_FORMAT) From c8e91d8b95308a13744d88326945fe7d9aa05c84 Mon Sep 17 00:00:00 2001 From: Paul Kathmann Date: Wed, 28 Jan 2026 10:37:32 -0500 Subject: [PATCH 4/4] update tests --- tests/logging/test_log_context.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/tests/logging/test_log_context.py b/tests/logging/test_log_context.py index 990463d..079d3cd 100644 --- a/tests/logging/test_log_context.py +++ b/tests/logging/test_log_context.py @@ -40,8 +40,13 @@ def logger_fixtures() -> tuple[ComputeModulesLoggerAdapter, ComputeModulesLogger return (internal_logger, logger_1, logger_2) -def format_log_context(pid: int, job_id: str) -> str: - return f"PID: {pid:<6} JOB: {job_id:<37}" +def assert_log_params(log: str, process_id: int, job_id: str, session_id: str = "") -> None: + """Parse log JSON and verify params field contains expected values""" + log_json = json.loads(log) + params = log_json["params"] + assert params["process_id"] == str(process_id), f"Expected process_id {process_id}, got {params['process_id']}" + assert params["job_id"] == job_id, f"Expected job_id {job_id}, got {params['job_id']}" + assert params["session_id"] == session_id, f"Expected session_id {session_id}, got {params['session_id']}" def test_log_format(capsys: pytest.CaptureFixture[str], custom_formatter: JsonFormatter) -> None: @@ -54,7 +59,7 @@ def test_log_format(capsys: pytest.CaptureFixture[str], custom_formatter: JsonFo parsed_out = list(filter(lambda x: x, captured.err.split("\n"))) assert len(parsed_out) == 3 for log in parsed_out: - assert format_log_context(pid=-1, job_id="") in log + assert_log_params(log, process_id=-1, job_id="") COMPUTE_MODULES_ADAPTER_MANAGER.update_process_id(process_id=PROCESS_ID) internal_logger.info(INFO_STR) @@ -64,7 +69,7 @@ def test_log_format(capsys: pytest.CaptureFixture[str], custom_formatter: JsonFo parsed_out = list(filter(lambda x: x, captured.err.split("\n"))) assert len(parsed_out) == 3 for log in parsed_out: - assert format_log_context(pid=PROCESS_ID, job_id="") in log + assert_log_params(log, process_id=PROCESS_ID, job_id="") job_id = str(uuid.uuid4()) COMPUTE_MODULES_ADAPTER_MANAGER.update_job_id(job_id=job_id) @@ -75,7 +80,7 @@ def test_log_format(capsys: pytest.CaptureFixture[str], custom_formatter: JsonFo parsed_out = list(filter(lambda x: x, captured.err.split("\n"))) assert len(parsed_out) == 3 for log in parsed_out: - assert format_log_context(pid=PROCESS_ID, job_id=job_id) in log + assert_log_params(log, process_id=PROCESS_ID, job_id=job_id) # Test clearing now COMPUTE_MODULES_ADAPTER_MANAGER.update_job_id(job_id="") @@ -86,7 +91,7 @@ def test_log_format(capsys: pytest.CaptureFixture[str], custom_formatter: JsonFo parsed_out = list(filter(lambda x: x, captured.err.split("\n"))) assert len(parsed_out) == 3 for log in parsed_out: - assert format_log_context(pid=PROCESS_ID, job_id="") in log + assert_log_params(log, process_id=PROCESS_ID, job_id="") # Test Custom Formatting # TODO split out into custom test once ComputeModuleLoggingAdapter made fixture to avoid capsys errors