From 715f29d1b9901e5cbf46f1add53c6a3ea5d7b160 Mon Sep 17 00:00:00 2001 From: Ivan Barba Date: Mon, 7 Sep 2026 18:30:58 +0000 Subject: [PATCH 1/8] [Debug logs] Enables debug level logs --- src/clusterfuzz/_internal/metrics/logs.py | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/clusterfuzz/_internal/metrics/logs.py b/src/clusterfuzz/_internal/metrics/logs.py index a66fa138ba4..27def4ab00a 100644 --- a/src/clusterfuzz/_internal/metrics/logs.py +++ b/src/clusterfuzz/_internal/metrics/logs.py @@ -53,6 +53,8 @@ _is_already_handling_uncaught = False _default_extras = {} +BASE_LOGGING_LEVEL = logging.DEBUG + def _increment_error_count(): """"Increment the error count metric.""" @@ -115,7 +117,7 @@ def get_handler_config(filename, backup_count): return { 'class': 'logging.handlers.RotatingFileHandler', - 'level': logging.INFO, + 'level': BASE_LOGGING_LEVEL, 'formatter': 'simple', 'filename': file_path, 'maxBytes': max_bytes, @@ -396,7 +398,7 @@ def json_fields_filter(record): def configure_appengine(): """Configure logging for App Engine.""" - logging.getLogger().setLevel(logging.INFO) + logging.getLogger().setLevel(BASE_LOGGING_LEVEL) if os.getenv('LOCAL_DEVELOPMENT') or environment.is_running_unit_tests(): return @@ -458,12 +460,12 @@ def k8s_label_filter(record): return True handler.addFilter(k8s_label_filter) - handler.setLevel(logging.INFO) + handler.setLevel(BASE_LOGGING_LEVEL) formatter = JsonFormatter() handler.setFormatter(formatter) logging.getLogger().addHandler(handler) - logging.getLogger().setLevel(logging.INFO) + logging.getLogger().setLevel(BASE_LOGGING_LEVEL) def configure_cloud_logging(): @@ -527,7 +529,7 @@ def cloud_label_filter(record): return True handler.addFilter(cloud_label_filter) - handler.setLevel(logging.INFO) + handler.setLevel(BASE_LOGGING_LEVEL) formatter = JsonFormatter() handler.setFormatter(formatter) @@ -549,7 +551,7 @@ def configure_swarming(name: str, extras: dict[str, str] | None = None) -> None: configure_cloud_logging() logger = logging.getLogger(name) - logger.setLevel(logging.INFO) + logger.setLevel(BASE_LOGGING_LEVEL) set_logger(logger) sys.excepthook = uncaught_exception_handler @@ -574,13 +576,13 @@ def configure(name, extras=None): return if _console_logging_enabled(): - logging.basicConfig(level=logging.INFO) + logging.basicConfig(level=BASE_LOGGING_LEVEL) if _file_logging_enabled(): config.dictConfig(get_logging_config_dict(name)) if _cloud_logging_enabled(): configure_cloud_logging() logger = logging.getLogger(name) - logger.setLevel(logging.INFO) + logger.setLevel(BASE_LOGGING_LEVEL) set_logger(logger) # Set _default_extras so they can be used later. @@ -768,6 +770,9 @@ def warning(message, **extras): """Logs the warning message.""" emit(logging.WARN, message, exc_info=sys.exc_info(), **extras) +def debug(message, **extras): + """Logs the debug message.""" + emit(logging.DEBUG, message, **extras) def error(message, **extras): """Logs the error in the error log file.""" From e61947c9c54b5b3478299380fa551df87080b808 Mon Sep 17 00:00:00 2001 From: Ivan Barba Date: Mon, 7 Sep 2026 18:36:32 +0000 Subject: [PATCH 2/8] [Debug logs][test] Adds debug log to confirm that indeed its seen --- src/python/bot/startup/run_bot.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/python/bot/startup/run_bot.py b/src/python/bot/startup/run_bot.py index 236a5eda962..961db6d046d 100644 --- a/src/python/bot/startup/run_bot.py +++ b/src/python/bot/startup/run_bot.py @@ -170,6 +170,7 @@ def task_loop(): execution_count = 0 max_task_executions = _get_max_task_executions() + logs.debug('Starting task loop.', is_debug_log=True) while True: stacktrace = '' exception_occurred = False From feded9b59139bca08ba8dcc9880b2e79cb499c0a Mon Sep 17 00:00:00 2001 From: Ivan Barba Date: Mon, 7 Sep 2026 20:36:48 +0000 Subject: [PATCH 3/8] Revert "[Debug logs][test] Adds debug log to confirm that indeed its seen" This reverts commit e61947c9c54b5b3478299380fa551df87080b808. --- src/python/bot/startup/run_bot.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/python/bot/startup/run_bot.py b/src/python/bot/startup/run_bot.py index 961db6d046d..236a5eda962 100644 --- a/src/python/bot/startup/run_bot.py +++ b/src/python/bot/startup/run_bot.py @@ -170,7 +170,6 @@ def task_loop(): execution_count = 0 max_task_executions = _get_max_task_executions() - logs.debug('Starting task loop.', is_debug_log=True) while True: stacktrace = '' exception_occurred = False From aac514bcd5b9fd3af5e1d74c14d3bad1ac8de3ce Mon Sep 17 00:00:00 2001 From: Ivan Barba Date: Mon, 7 Sep 2026 20:48:02 +0000 Subject: [PATCH 4/8] [Debug Logs] Fix Linter issues --- src/clusterfuzz/_internal/metrics/logs.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/clusterfuzz/_internal/metrics/logs.py b/src/clusterfuzz/_internal/metrics/logs.py index 27def4ab00a..138144abea1 100644 --- a/src/clusterfuzz/_internal/metrics/logs.py +++ b/src/clusterfuzz/_internal/metrics/logs.py @@ -770,10 +770,12 @@ def warning(message, **extras): """Logs the warning message.""" emit(logging.WARN, message, exc_info=sys.exc_info(), **extras) + def debug(message, **extras): """Logs the debug message.""" emit(logging.DEBUG, message, **extras) + def error(message, **extras): """Logs the error in the error log file.""" exception = extras.pop('exception', None) From 80aaaaf1ea3462d9ba28ee92cea1d53baca66a4d Mon Sep 17 00:00:00 2001 From: Ivan Barba Date: Tue, 8 Sep 2026 18:06:16 +0000 Subject: [PATCH 5/8] [Debug logs] Adds debug filters --- src/clusterfuzz/_internal/metrics/logs.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/clusterfuzz/_internal/metrics/logs.py b/src/clusterfuzz/_internal/metrics/logs.py index 138144abea1..53fea4fbf8b 100644 --- a/src/clusterfuzz/_internal/metrics/logs.py +++ b/src/clusterfuzz/_internal/metrics/logs.py @@ -97,6 +97,17 @@ def _cloud_logging_enabled() -> bool: not environment.is_running_unit_tests() and not _is_local()) +def _allow_clusterfuzz_only(record: logging.LogRecord) -> bool: + """Only allow logs originating from ClusterFuzz.""" + # Option A: Filter by logger name prefix + if record.name.startswith('clusterfuzz'): + return True + # Option B: Filter by source file path + if 'clusterfuzz' in record.pathname: + return True + return False + + def suppress_unwanted_warnings(): """Suppress unwanted warnings.""" # See https://github.com/googleapis/google-api-python-client/issues/299 @@ -408,6 +419,7 @@ def configure_appengine(): handler = client.get_default_handler() handler.addFilter(json_fields_filter) logging.getLogger().addHandler(handler) + logging.getLogger().addFilter(_allow_clusterfuzz_only) def configure_k8s(): @@ -466,6 +478,7 @@ def k8s_label_filter(record): logging.getLogger().addHandler(handler) logging.getLogger().setLevel(BASE_LOGGING_LEVEL) + logging.getLogger().addFilter(_allow_clusterfuzz_only) def configure_cloud_logging(): @@ -534,6 +547,7 @@ def cloud_label_filter(record): handler.setFormatter(formatter) logging.getLogger().addHandler(handler) + logging.getLogger().addFilter(_allow_clusterfuzz_only) def configure_swarming(name: str, extras: dict[str, str] | None = None) -> None: @@ -583,6 +597,7 @@ def configure(name, extras=None): configure_cloud_logging() logger = logging.getLogger(name) logger.setLevel(BASE_LOGGING_LEVEL) + logger.addFilter(_allow_clusterfuzz_only) set_logger(logger) # Set _default_extras so they can be used later. From 4d546a0f18a4828e3d94a2b2bfcb60ba0c523978 Mon Sep 17 00:00:00 2001 From: Ivan Barba Date: Tue, 8 Sep 2026 19:51:02 +0000 Subject: [PATCH 6/8] [Debug logs] Allows control over base logging level --- src/clusterfuzz/_internal/metrics/logs.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/clusterfuzz/_internal/metrics/logs.py b/src/clusterfuzz/_internal/metrics/logs.py index 53fea4fbf8b..c1b6496c63d 100644 --- a/src/clusterfuzz/_internal/metrics/logs.py +++ b/src/clusterfuzz/_internal/metrics/logs.py @@ -53,7 +53,7 @@ _is_already_handling_uncaught = False _default_extras = {} -BASE_LOGGING_LEVEL = logging.DEBUG +BASE_LOGGING_LEVEL = os.getenv('LOG_LEVEL', logging.DEBUG) def _increment_error_count(): @@ -98,12 +98,10 @@ def _cloud_logging_enabled() -> bool: def _allow_clusterfuzz_only(record: logging.LogRecord) -> bool: - """Only allow logs originating from ClusterFuzz.""" - # Option A: Filter by logger name prefix + """Only allow logs originating from ClusterFuzz code.""" if record.name.startswith('clusterfuzz'): return True - # Option B: Filter by source file path - if 'clusterfuzz' in record.pathname: + if 'clusterfuzz' in record.pathname and 'third_party' not in record.pathname: return True return False From 7dd7dd3d4fa9ab98668afde56e2a4bdc69ebe173 Mon Sep 17 00:00:00 2001 From: Ivan Barba Date: Tue, 8 Sep 2026 21:00:02 +0000 Subject: [PATCH 7/8] [Debug logs] INFO as default && filters out external logs --- src/clusterfuzz/_internal/metrics/logs.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/clusterfuzz/_internal/metrics/logs.py b/src/clusterfuzz/_internal/metrics/logs.py index c1b6496c63d..bc34196c491 100644 --- a/src/clusterfuzz/_internal/metrics/logs.py +++ b/src/clusterfuzz/_internal/metrics/logs.py @@ -53,7 +53,7 @@ _is_already_handling_uncaught = False _default_extras = {} -BASE_LOGGING_LEVEL = os.getenv('LOG_LEVEL', logging.DEBUG) +BASE_LOGGING_LEVEL = os.getenv('LOG_LEVEL', logging.INFO) def _increment_error_count(): @@ -99,11 +99,9 @@ def _cloud_logging_enabled() -> bool: def _allow_clusterfuzz_only(record: logging.LogRecord) -> bool: """Only allow logs originating from ClusterFuzz code.""" - if record.name.startswith('clusterfuzz'): - return True - if 'clusterfuzz' in record.pathname and 'third_party' not in record.pathname: - return True - return False + if 'site-packages' in record.pathname or 'third_party' in record.pathname: + return False + return True def suppress_unwanted_warnings(): From 86f9b0dfbfec4fad9e2b45646efdd9c4e363e829 Mon Sep 17 00:00:00 2001 From: Ivan Barba Date: Tue, 8 Sep 2026 21:12:46 +0000 Subject: [PATCH 8/8] [Debug logs] Fix linter issues --- src/clusterfuzz/_internal/metrics/logs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/clusterfuzz/_internal/metrics/logs.py b/src/clusterfuzz/_internal/metrics/logs.py index bc34196c491..f33244e2692 100644 --- a/src/clusterfuzz/_internal/metrics/logs.py +++ b/src/clusterfuzz/_internal/metrics/logs.py @@ -53,7 +53,7 @@ _is_already_handling_uncaught = False _default_extras = {} -BASE_LOGGING_LEVEL = os.getenv('LOG_LEVEL', logging.INFO) +BASE_LOGGING_LEVEL = os.getenv('LOG_LEVEL', 'INFO') def _increment_error_count():