diff --git a/src/backend/base/langflow/logging/logger.py b/src/backend/base/langflow/logging/logger.py index e235c2bf061f..3645ce582c78 100644 --- a/src/backend/base/langflow/logging/logger.py +++ b/src/backend/base/langflow/logging/logger.py @@ -218,9 +218,11 @@ 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") - 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_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 @@ -243,20 +245,38 @@ def configure( structlog.contextvars.merge_contextvars, structlog.processors.add_log_level, structlog.processors.TimeStamper(fmt="iso"), - 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()) elif log_env.lower() == "container_csv": - processors.append( - structlog.processors.KeyValueRenderer( - key_order=["timestamp", "level", "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" 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: