@@ -66,3 +66,53 @@ def set_level(level: str):
6666 logger = logging .getLogger (name )
6767 logger .setLevel (level )
6868 logger .info (f"Logging level set to { level } " )
69+
70+
71+ logger = getLogger (__name__ )
72+ logger .info ("Imported map2loop.logging module" )
73+
74+
75+ def setLogging (level = "info" , handler = None ):
76+ """Set the logging parameters for log file or custom handler.
77+
78+ Parameters
79+ ----------
80+ level : str, optional
81+ Logging level to set, by default "info"
82+ Valid options: 'info', 'warning', 'error', 'debug'
83+ handler : logging.Handler, optional
84+ A logging handler to use instead of the default StreamHandler, by default None
85+
86+ Examples
87+ --------
88+ >>> from map2loop.logging import setLogging
89+ >>> setLogging('debug')
90+ >>> setLogging('info', logging.FileHandler('loop.log'))
91+ """
92+ levels = get_levels ()
93+ level_value = levels .get (level , logging .WARNING )
94+
95+ # Create default handler if none provided
96+ if handler is None :
97+ handler = logging .StreamHandler ()
98+
99+ formatter = logging .Formatter (
100+ "%(levelname)s: %(asctime)s: %(filename)s:%(lineno)d -- %(message)s"
101+ )
102+ handler .setFormatter (formatter )
103+ handler .setLevel (level_value )
104+
105+ # Replace handlers in all known loggers
106+ for name in loggers :
107+ logger = logging .getLogger (name )
108+ logger .handlers = []
109+ logger .addHandler (handler )
110+ logger .setLevel (level_value )
111+
112+ # Also apply to main module logger
113+ main_logger = logging .getLogger (__name__ )
114+ main_logger .handlers = []
115+ main_logger .addHandler (handler )
116+ main_logger .setLevel (level_value )
117+
118+ main_logger .info (f"Set logging to { level } " )
0 commit comments