logging.py: Don't change log level of the root logger to bigger numeric value
This commit is contained in:
parent
cbb2c55dea
commit
d895f5d6fc
1
AUTHORS
1
AUTHORS
|
@ -105,6 +105,7 @@ Jurko Gospodnetić
|
|||
Justyna Janczyszyn
|
||||
Kale Kundert
|
||||
Katarzyna Jachim
|
||||
Katerina Koukiou
|
||||
Kevin Cox
|
||||
Kodi B. Arfer
|
||||
Lawrence Mitchell
|
||||
|
|
|
@ -153,7 +153,7 @@ def catching_logs(handler, formatter=None, level=None):
|
|||
root_logger.addHandler(handler)
|
||||
if level is not None:
|
||||
orig_level = root_logger.level
|
||||
root_logger.setLevel(level)
|
||||
root_logger.setLevel(min(orig_level, level))
|
||||
try:
|
||||
yield handler
|
||||
finally:
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
pytest should not change the log level of the root logger when the
|
||||
``log-level`` parameter has greater numeric value than that of the level of
|
||||
the root logger.
|
|
@ -49,6 +49,66 @@ def test_messages_logged(testdir):
|
|||
'text going to stderr'])
|
||||
|
||||
|
||||
def test_root_logger_affected(testdir):
|
||||
testdir.makepyfile("""
|
||||
import logging
|
||||
logger = logging.getLogger()
|
||||
def test_foo():
|
||||
logger.info('info text ' + 'going to logger')
|
||||
logger.warning('warning text ' + 'going to logger')
|
||||
logger.error('error text ' + 'going to logger')
|
||||
|
||||
assert 0
|
||||
""")
|
||||
log_file = testdir.tmpdir.join('pytest.log').strpath
|
||||
result = testdir.runpytest('--log-level=ERROR', '--log-file=pytest.log')
|
||||
assert result.ret == 1
|
||||
|
||||
# the capture log calls in the stdout section only contain the
|
||||
# logger.error msg, because --log-level=ERROR
|
||||
result.stdout.fnmatch_lines(['*error text going to logger*'])
|
||||
with pytest.raises(pytest.fail.Exception):
|
||||
result.stdout.fnmatch_lines(['*warning text going to logger*'])
|
||||
with pytest.raises(pytest.fail.Exception):
|
||||
result.stdout.fnmatch_lines(['*info text going to logger*'])
|
||||
|
||||
# the log file should contain the warning and the error log messages and
|
||||
# not the info one, because the default level of the root logger is
|
||||
# WARNING.
|
||||
assert os.path.isfile(log_file)
|
||||
with open(log_file) as rfh:
|
||||
contents = rfh.read()
|
||||
assert "info text going to logger" not in contents
|
||||
assert "warning text going to logger" in contents
|
||||
assert "error text going to logger" in contents
|
||||
|
||||
|
||||
def test_log_cli_level_log_level_interaction(testdir):
|
||||
testdir.makepyfile("""
|
||||
import logging
|
||||
logger = logging.getLogger()
|
||||
|
||||
def test_foo():
|
||||
logger.debug('debug text ' + 'going to logger')
|
||||
logger.info('info text ' + 'going to logger')
|
||||
logger.warning('warning text ' + 'going to logger')
|
||||
logger.error('error text ' + 'going to logger')
|
||||
assert 0
|
||||
""")
|
||||
|
||||
result = testdir.runpytest('--log-cli-level=INFO', '--log-level=ERROR')
|
||||
assert result.ret == 1
|
||||
|
||||
result.stdout.fnmatch_lines([
|
||||
'*-- live log call --*',
|
||||
'*INFO*info text going to logger',
|
||||
'*WARNING*warning text going to logger',
|
||||
'*ERROR*error text going to logger',
|
||||
'=* 1 failed in *=',
|
||||
])
|
||||
assert 'DEBUG' not in result.stdout.str()
|
||||
|
||||
|
||||
def test_setup_logging(testdir):
|
||||
testdir.makepyfile('''
|
||||
import logging
|
||||
|
@ -61,7 +121,7 @@ def test_setup_logging(testdir):
|
|||
def test_foo():
|
||||
logger.info('text going to logger from call')
|
||||
assert False
|
||||
''')
|
||||
''')
|
||||
result = testdir.runpytest('--log-level=INFO')
|
||||
assert result.ret == 1
|
||||
result.stdout.fnmatch_lines(['*- Captured *log setup -*',
|
||||
|
|
Loading…
Reference in New Issue