Coverage for lynceus/core/logger_utils.py: 100%
6 statements
« prev ^ index » next coverage.py v7.10.0, created at 2025-07-29 08:46 +0000
« prev ^ index » next coverage.py v7.10.0, created at 2025-07-29 08:46 +0000
1import logging
2from logging import StreamHandler
5class FilteredStdoutLoggerHandler(StreamHandler):
6 """
7 A specialized StreamHandler that filters log messages for stdout output.
9 This handler automatically filters out WARNING level and higher messages
10 to prevent duplicate log entries when using separate handlers for stdout
11 and stderr. Messages with WARNING level or higher should be directed to
12 stderr to maintain proper log separation.
14 Inherits from logging.StreamHandler and adds automatic filtering to ensure
15 only INFO, DEBUG, and TRACE level messages are sent to stdout.
16 """
18 def __init__(self, stream=None):
19 """
20 Initialize the filtered stdout logger handler.
22 Parameters
23 ----------
24 stream : optional
25 Optional stream to write to. If None, defaults to sys.stdout
27 Notes
28 -----
29 Automatically adds a filter to exclude WARNING level and higher messages
30 from being written to the output stream.
31 """
32 super().__init__(stream=stream)
34 # Adds automatically filter to NOT log messages from Warning to more, which should be logged on stderr, and not stdout to avoid duplicates.
35 self.addFilter(lambda record: record.levelno < logging.WARNING)