From 38365d24f343bcb68204d86d775ffe8c5e120f67 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Mon, 8 Sep 2025 15:31:29 -0300 Subject: [PATCH 1/8] fix: enhance logging configuration to include caller information and improve log level handling --- src/backend/base/langflow/logging/logger.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/backend/base/langflow/logging/logger.py b/src/backend/base/langflow/logging/logger.py index e235c2bf061f..8a762151ef6a 100644 --- a/src/backend/base/langflow/logging/logger.py +++ b/src/backend/base/langflow/logging/logger.py @@ -219,7 +219,7 @@ def configure( log_level = os.getenv("LANGFLOW_LOG_LEVEL") requested_min_level = LOG_LEVEL_MAP.get( - ((log_level if log_level is not None else os.getenv("LANGFLOW_LOG_LEVEL", "ERROR")).upper()), logging.ERROR + (log_level or os.getenv("LANGFLOW_LOG_LEVEL", "ERROR")).upper(), logging.ERROR ) if current_min_level == requested_min_level: return @@ -243,6 +243,13 @@ def configure( structlog.contextvars.merge_contextvars, structlog.processors.add_log_level, structlog.processors.TimeStamper(fmt="iso"), + structlog.processors.CallsiteParameterAdder( + parameters=[ + structlog.processors.CallsiteParameter.FILENAME, + structlog.processors.CallsiteParameter.FUNC_NAME, + structlog.processors.CallsiteParameter.LINENO, + ] + ), # Add caller information add_serialized, remove_exception_in_production, buffer_writer, @@ -254,7 +261,7 @@ def configure( elif log_env.lower() == "container_csv": processors.append( structlog.processors.KeyValueRenderer( - key_order=["timestamp", "level", "module", "event"], drop_missing=True + key_order=["timestamp", "level", "caller", "module", "event"], drop_missing=True ) ) else: From f508a8ffcff78e6a0943d70056dbbc7499a18292 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Mon, 8 Sep 2025 15:33:33 -0300 Subject: [PATCH 2/8] fix: add caller information to logging configuration --- src/backend/base/langflow/logging/logger.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/base/langflow/logging/logger.py b/src/backend/base/langflow/logging/logger.py index 8a762151ef6a..cf0ae12d6a98 100644 --- a/src/backend/base/langflow/logging/logger.py +++ b/src/backend/base/langflow/logging/logger.py @@ -249,7 +249,7 @@ def configure( structlog.processors.CallsiteParameter.FUNC_NAME, structlog.processors.CallsiteParameter.LINENO, ] - ), # Add caller information + ), add_serialized, remove_exception_in_production, buffer_writer, From 60722449c934429d0a8f980243d7380d7a61d8a6 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Mon, 8 Sep 2025 15:37:25 -0300 Subject: [PATCH 3/8] fix: conditionally add callsite information to logging configuration based on DEV environment --- src/backend/base/langflow/logging/logger.py | 30 ++++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/backend/base/langflow/logging/logger.py b/src/backend/base/langflow/logging/logger.py index cf0ae12d6a98..0427837552b4 100644 --- a/src/backend/base/langflow/logging/logger.py +++ b/src/backend/base/langflow/logging/logger.py @@ -243,18 +243,28 @@ def configure( structlog.contextvars.merge_contextvars, structlog.processors.add_log_level, structlog.processors.TimeStamper(fmt="iso"), - structlog.processors.CallsiteParameterAdder( - parameters=[ - structlog.processors.CallsiteParameter.FILENAME, - structlog.processors.CallsiteParameter.FUNC_NAME, - structlog.processors.CallsiteParameter.LINENO, - ] - ), - add_serialized, - remove_exception_in_production, - buffer_writer, ] + # Add callsite information only when LANGFLOW_DEV is set + if DEV: + processors.append( + structlog.processors.CallsiteParameterAdder( + parameters=[ + structlog.processors.CallsiteParameter.FILENAME, + structlog.processors.CallsiteParameter.FUNC_NAME, + structlog.processors.CallsiteParameter.LINENO, + ] + ) + ) + + processors.extend( + [ + add_serialized, + remove_exception_in_production, + buffer_writer, + ] + ) + # Configure output based on environment if log_env.lower() == "container" or log_env.lower() == "container_json": processors.append(structlog.processors.JSONRenderer()) From d86c8c65c41a6b6f9e74deef63a12839eb1d4901 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Mon, 8 Sep 2025 15:48:20 -0300 Subject: [PATCH 4/8] fix: update DEV variable initialization to use environment variable --- src/backend/base/langflow/settings.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/backend/base/langflow/settings.py b/src/backend/base/langflow/settings.py index 14488e84469a..4ce55e0a346f 100644 --- a/src/backend/base/langflow/settings.py +++ b/src/backend/base/langflow/settings.py @@ -1,4 +1,6 @@ -DEV = False +import os + +DEV = os.getenv("LANGFLOW_DEV", "false").lower() == "true" def _set_dev(value) -> None: From 9baac0d85da58fea913f3279f6144cbc17a9337f Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Mon, 8 Sep 2025 15:51:37 -0300 Subject: [PATCH 5/8] fix: update logging configuration to include callsite fields in DEV environment --- src/backend/base/langflow/logging/logger.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/backend/base/langflow/logging/logger.py b/src/backend/base/langflow/logging/logger.py index 0427837552b4..7712d1685700 100644 --- a/src/backend/base/langflow/logging/logger.py +++ b/src/backend/base/langflow/logging/logger.py @@ -269,11 +269,12 @@ def configure( if log_env.lower() == "container" or log_env.lower() == "container_json": processors.append(structlog.processors.JSONRenderer()) elif log_env.lower() == "container_csv": - processors.append( - structlog.processors.KeyValueRenderer( - key_order=["timestamp", "level", "caller", "module", "event"], drop_missing=True - ) - ) + # Include callsite fields in key order when DEV is enabled + key_order = ["timestamp", "level", "event"] + if DEV: + key_order += ["filename", "func_name", "lineno"] + + processors.append(structlog.processors.KeyValueRenderer(key_order=key_order, drop_missing=True)) else: # Use rich console for pretty printing based on environment variable log_stdout_pretty = os.getenv("LANGFLOW_PRETTY_LOGS", "true").lower() == "true" From a3664a03385dde3e92ab07340a19b850da1333cd Mon Sep 17 00:00:00 2001 From: Jordan Frazier Date: Thu, 11 Sep 2025 20:48:04 -0400 Subject: [PATCH 6/8] mypy --- src/backend/base/langflow/logging/logger.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/backend/base/langflow/logging/logger.py b/src/backend/base/langflow/logging/logger.py index 7712d1685700..f495080a42cd 100644 --- a/src/backend/base/langflow/logging/logger.py +++ b/src/backend/base/langflow/logging/logger.py @@ -218,8 +218,9 @@ def configure( if os.getenv("LANGFLOW_LOG_LEVEL", "").upper() in VALID_LOG_LEVELS and log_level is None: log_level = os.getenv("LANGFLOW_LOG_LEVEL") + log_level_str: str = log_level or os.getenv("LANGFLOW_LOG_LEVEL", "ERROR") requested_min_level = LOG_LEVEL_MAP.get( - (log_level or os.getenv("LANGFLOW_LOG_LEVEL", "ERROR")).upper(), logging.ERROR + log_level_str.upper(), logging.ERROR ) if current_min_level == requested_min_level: return From 40e86895ec89f8df489d2f37c9b7d6e025433c0c Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Fri, 12 Sep 2025 00:50:54 +0000 Subject: [PATCH 7/8] [autofix.ci] apply automated fixes --- src/backend/base/langflow/logging/logger.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/backend/base/langflow/logging/logger.py b/src/backend/base/langflow/logging/logger.py index f495080a42cd..e2377c707941 100644 --- a/src/backend/base/langflow/logging/logger.py +++ b/src/backend/base/langflow/logging/logger.py @@ -219,9 +219,7 @@ def configure( log_level = os.getenv("LANGFLOW_LOG_LEVEL") log_level_str: str = log_level or os.getenv("LANGFLOW_LOG_LEVEL", "ERROR") - requested_min_level = LOG_LEVEL_MAP.get( - log_level_str.upper(), logging.ERROR - ) + requested_min_level = LOG_LEVEL_MAP.get(log_level_str.upper(), logging.ERROR) if current_min_level == requested_min_level: return From 4657e84a91d04cc2c851b2aeeab6780383baae6d Mon Sep 17 00:00:00 2001 From: Jordan Frazier Date: Thu, 11 Sep 2025 21:00:49 -0400 Subject: [PATCH 8/8] mypy --- src/backend/base/langflow/logging/logger.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/backend/base/langflow/logging/logger.py b/src/backend/base/langflow/logging/logger.py index e2377c707941..3645ce582c78 100644 --- a/src/backend/base/langflow/logging/logger.py +++ b/src/backend/base/langflow/logging/logger.py @@ -218,7 +218,10 @@ def configure( if os.getenv("LANGFLOW_LOG_LEVEL", "").upper() in VALID_LOG_LEVELS and log_level is None: log_level = os.getenv("LANGFLOW_LOG_LEVEL") - log_level_str: str = log_level or os.getenv("LANGFLOW_LOG_LEVEL", "ERROR") + log_level_str = os.getenv("LANGFLOW_LOG_LEVEL", "ERROR") + if log_level is not None: + log_level_str = log_level + requested_min_level = LOG_LEVEL_MAP.get(log_level_str.upper(), logging.ERROR) if current_min_level == requested_min_level: return