@@ -82,26 +82,29 @@ def add_option_ini(option, dest, default=None, type=None, **kwargs):
82
82
83
83
84
84
@contextmanager
85
- def catching_logs (handler , formatter = None , level = logging . NOTSET ):
85
+ def catching_logs (handler , formatter = None , level = None ):
86
86
"""Context manager that prepares the whole logging machinery properly."""
87
87
root_logger = logging .getLogger ()
88
88
89
89
if formatter is not None :
90
90
handler .setFormatter (formatter )
91
- handler .setLevel (level )
91
+ if level is not None :
92
+ handler .setLevel (level )
92
93
93
94
# Adding the same handler twice would confuse logging system.
94
95
# Just don't do that.
95
96
add_new_handler = handler not in root_logger .handlers
96
97
97
98
if add_new_handler :
98
99
root_logger .addHandler (handler )
99
- orig_level = root_logger .level
100
- root_logger .setLevel (min (orig_level , level ))
100
+ if level is not None :
101
+ orig_level = root_logger .level
102
+ root_logger .setLevel (level )
101
103
try :
102
104
yield handler
103
105
finally :
104
- root_logger .setLevel (orig_level )
106
+ if level is not None :
107
+ root_logger .setLevel (orig_level )
105
108
if add_new_handler :
106
109
root_logger .removeHandler (handler )
107
110
@@ -159,14 +162,10 @@ def clear(self):
159
162
def set_level (self , level , logger = None ):
160
163
"""Sets the level for capturing of logs.
161
164
162
- By default, the level is set on the handler used to capture
163
- logs. Specify a logger name to instead set the level of any
164
- logger.
165
+ :param int level: the logger to level.
166
+ :param str logger: the logger to update the level. If not given, the root logger level is updated.
165
167
"""
166
- if logger is None :
167
- logger = self .handler
168
- else :
169
- logger = logging .getLogger (logger )
168
+ logger = logging .getLogger (logger )
170
169
logger .setLevel (level )
171
170
172
171
@contextmanager
@@ -252,6 +251,7 @@ def __init__(self, config):
252
251
self .formatter = logging .Formatter (
253
252
get_option_ini (config , 'log_format' ),
254
253
get_option_ini (config , 'log_date_format' ))
254
+ self .log_level = get_actual_log_level (config , 'log_level' )
255
255
256
256
if config .getini ('log_cli' ):
257
257
log_cli_handler = logging .StreamHandler (sys .stderr )
@@ -262,8 +262,7 @@ def __init__(self, config):
262
262
log_cli_formatter = logging .Formatter (
263
263
log_cli_format ,
264
264
datefmt = log_cli_date_format )
265
- log_cli_level = get_actual_log_level (
266
- config , 'log_cli_level' , 'log_level' ) or logging .WARNING
265
+ log_cli_level = get_actual_log_level (config , 'log_cli_level' , 'log_level' )
267
266
self .log_cli_handler = log_cli_handler # needed for a single unittest
268
267
self .live_logs_context = catching_logs (log_cli_handler ,
269
268
formatter = log_cli_formatter ,
@@ -274,8 +273,7 @@ def __init__(self, config):
274
273
275
274
log_file = get_option_ini (config , 'log_file' )
276
275
if log_file :
277
- self .log_file_level = get_actual_log_level (
278
- config , 'log_file_level' ) or logging .WARNING
276
+ self .log_file_level = get_actual_log_level (config , 'log_file_level' )
279
277
280
278
log_file_format = get_option_ini (
281
279
config , 'log_file_format' , 'log_format' )
@@ -296,7 +294,7 @@ def __init__(self, config):
296
294
def _runtest_for (self , item , when ):
297
295
"""Implements the internals of pytest_runtest_xxx() hook."""
298
296
with catching_logs (LogCaptureHandler (),
299
- formatter = self .formatter ) as log_handler :
297
+ formatter = self .formatter , level = self . log_level ) as log_handler :
300
298
item .catch_log_handler = log_handler
301
299
try :
302
300
yield # run test
0 commit comments