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

1import logging 

2from logging import StreamHandler 

3 

4 

5class FilteredStdoutLoggerHandler(StreamHandler): 

6 """ 

7 A specialized StreamHandler that filters log messages for stdout output. 

8 

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. 

13 

14 Inherits from logging.StreamHandler and adds automatic filtering to ensure 

15 only INFO, DEBUG, and TRACE level messages are sent to stdout. 

16 """ 

17 

18 def __init__(self, stream=None): 

19 """ 

20 Initialize the filtered stdout logger handler. 

21 

22 Parameters 

23 ---------- 

24 stream : optional 

25 Optional stream to write to. If None, defaults to sys.stdout 

26 

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) 

33 

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)