2323INFO (20) Prints info message (no date/time, just plain message)
2424TASK (15) CUSTOM LABEL - Prints a task header message (using asterisks)
2525DEBUG (10) Prints debug message (using date/time)
26- FILE (5) CUSTOM LABEL - Outputs with the DEBUG label but only to a file
27- handle (using date/time)
2826"""
2927import logging
3028import os
@@ -81,52 +79,47 @@ class LogLevelTask(object):
8179 label = "TASK"
8280
8381
84- class LogLevelFile (object ):
85- level = 5
86- # Label messages DEBUG as it is contains the same messages as debug, just that they always go
87- # to the log file.
88- label = "DEBUG"
89-
90-
9182def setup_logger_handler (log_name , log_dir ):
9283 """Setup custom logging levels, handlers, and so on. Call this method
9384 from your application's main start point.
9485 log_name = the name for the log file
9586 log_dir = path to the dir where log file will be presented
9687 """
97- # set custom labels
88+ # set the TASK custom label
9889 logging .addLevelName (LogLevelTask .level , LogLevelTask .label )
99- logging .addLevelName (LogLevelFile .level , LogLevelFile .label )
10090 logging .Logger .task = _task
101- logging .Logger .file = _file
102- logging .Logger .debug = _debug
10391 logging .Logger .critical = _critical
10492
10593 # enable raising exceptions
10694 logging .raiseExceptions = True
107- # get root logger
95+ # get the highest level app logger
10896 logger = logging .getLogger ("convert2rhel" )
109- # propagate
97+ # propagate log messages up to the root logger to be able to capture them in unit tests
98+ # refence: https://github.com/oamg/convert2rhel/pull/179
11099 logger .propagate = True
111- # set default logging level
112- logger .setLevel (LogLevelFile . level )
100+ # set the DEBUG level as the lowest allowed level to be handled by convert2rhel
101+ logger .setLevel (logging . DEBUG )
113102
114103 # create sys.stdout handler for info/debug
115104 stdout_handler = logging .StreamHandler (sys .stdout )
116105 formatter = CustomFormatter ("%(message)s" )
117106 formatter .disable_colors (should_disable_color_output ())
118107 stdout_handler .setFormatter (formatter )
108+ debug_flag_filter = DebugFlagFilter ()
109+ stdout_handler .addFilter (debug_flag_filter )
110+ # Set the DEBUG level as the lowest allowed level to be printed to stdout.
111+ # Whether a debug message is actually printed or not is decided in DebugFlagFilter.
119112 stdout_handler .setLevel (logging .DEBUG )
120113 logger .addHandler (stdout_handler )
121114
122- # create file handler
115+ # create a log file handler
123116 if not os .path .isdir (log_dir ):
124117 os .makedirs (log_dir ) # pragma: no cover
125118 handler = logging .FileHandler (os .path .join (log_dir , log_name ), "a" )
126119 formatter = CustomFormatter ("%(message)s" )
127120 formatter .disable_colors (True )
128121 handler .setFormatter (formatter )
129- handler .setLevel (LogLevelFile . level )
122+ handler .setLevel (logging . DEBUG )
130123 logger .addHandler (handler )
131124
132125
@@ -143,6 +136,18 @@ def should_disable_color_output():
143136 return False
144137
145138
139+ class DebugFlagFilter (logging .Filter ):
140+ """Print debug messages to the stdout only when --debug is used."""
141+
142+ def filter (self , record ):
143+ from convert2rhel .toolopts import tool_opts
144+
145+ if record .levelno == logging .DEBUG and not tool_opts .debug :
146+ # not logging a debug level message if the --debug option hasn't been used
147+ return False
148+ return True
149+
150+
146151def archive_old_logger_files (log_name , log_dir ):
147152 """Archive the old log files to not mess with multiple runs outputs.
148153 Every time a new run begins, this method will be called to archive the previous logs
@@ -187,27 +192,12 @@ def _task(self, msg, *args, **kwargs):
187192 self ._log (LogLevelTask .level , msg , args , ** kwargs )
188193
189194
190- def _file (self , msg , * args , ** kwargs ):
191- if self .isEnabledFor (LogLevelFile .level ):
192- self ._log (LogLevelFile .level , msg , args , ** kwargs )
193-
194-
195195def _critical (self , msg , * args , ** kwargs ):
196196 if self .isEnabledFor (logging .CRITICAL ):
197197 self ._log (logging .CRITICAL , msg , args , ** kwargs )
198198 sys .exit (msg )
199199
200200
201- def _debug (self , msg , * args , ** kwargs ):
202- if self .isEnabledFor (logging .DEBUG ):
203- from convert2rhel .toolopts import tool_opts
204-
205- if tool_opts .debug :
206- self ._log (logging .DEBUG , msg , args , ** kwargs )
207- else :
208- self ._log (LogLevelFile .level , msg , args , ** kwargs )
209-
210-
211201class bcolors :
212202 OKGREEN = "\033 [92m"
213203 WARNING = "\033 [93m"
0 commit comments