|
29 | 29 | logger.info("Imported LoopStructural") |
30 | 30 |
|
31 | 31 |
|
32 | | -def setLogging(level="info"): |
| 32 | +def setLogging(level="info", handler=None): |
33 | 33 | """ |
34 | | - Set the logging parameters for log file |
| 34 | + Set the logging parameters for log file or custom handler |
35 | 35 |
|
36 | 36 | Parameters |
37 | 37 | ---------- |
38 | | - filename : string |
39 | | - name of file or path to file |
40 | | - level : str, optional |
41 | | - 'info', 'warning', 'error', 'debug' mapped to logging levels, by default 'info' |
| 38 | + level : str |
| 39 | + 'info', 'warning', 'error', 'debug' |
| 40 | + handler : logging.Handler, optional |
| 41 | + A logging handler to use instead of the default StreamHandler |
42 | 42 | """ |
43 | 43 | import LoopStructural |
44 | 44 |
|
45 | | - logger = getLogger(__name__) |
46 | | - |
47 | 45 | levels = get_levels() |
48 | | - level = levels.get(level, logging.WARNING) |
49 | | - LoopStructural.ch.setLevel(level) |
| 46 | + level_value = levels.get(level, logging.WARNING) |
| 47 | + |
| 48 | + # Create default handler if none provided |
| 49 | + if handler is None: |
| 50 | + handler = logging.StreamHandler() |
| 51 | + |
| 52 | + formatter = logging.Formatter( |
| 53 | + "%(levelname)s: %(asctime)s: %(filename)s:%(lineno)d -- %(message)s" |
| 54 | + ) |
| 55 | + handler.setFormatter(formatter) |
| 56 | + handler.setLevel(level_value) |
50 | 57 |
|
| 58 | + # Replace handlers in all known loggers |
51 | 59 | for name in LoopStructural.loggers: |
52 | 60 | logger = logging.getLogger(name) |
53 | | - logger.setLevel(level) |
54 | | - logger.info(f'Set logging to {level}') |
| 61 | + logger.handlers = [] |
| 62 | + logger.addHandler(handler) |
| 63 | + logger.setLevel(level_value) |
| 64 | + |
| 65 | + # Also apply to main module logger |
| 66 | + main_logger = logging.getLogger(__name__) |
| 67 | + main_logger.handlers = [] |
| 68 | + main_logger.addHandler(handler) |
| 69 | + main_logger.setLevel(level_value) |
| 70 | + |
| 71 | + main_logger.info(f"Set logging to {level}") |
0 commit comments