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
|
Justyna Janczyszyn
|
||||||
Kale Kundert
|
Kale Kundert
|
||||||
Katarzyna Jachim
|
Katarzyna Jachim
|
||||||
|
Katerina Koukiou
|
||||||
Kevin Cox
|
Kevin Cox
|
||||||
Kodi B. Arfer
|
Kodi B. Arfer
|
||||||
Lawrence Mitchell
|
Lawrence Mitchell
|
||||||
|
|
|
@ -153,7 +153,7 @@ def catching_logs(handler, formatter=None, level=None):
|
||||||
root_logger.addHandler(handler)
|
root_logger.addHandler(handler)
|
||||||
if level is not None:
|
if level is not None:
|
||||||
orig_level = root_logger.level
|
orig_level = root_logger.level
|
||||||
root_logger.setLevel(level)
|
root_logger.setLevel(min(orig_level, level))
|
||||||
try:
|
try:
|
||||||
yield handler
|
yield handler
|
||||||
finally:
|
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'])
|
'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):
|
def test_setup_logging(testdir):
|
||||||
testdir.makepyfile('''
|
testdir.makepyfile('''
|
||||||
import logging
|
import logging
|
||||||
|
@ -61,7 +121,7 @@ def test_setup_logging(testdir):
|
||||||
def test_foo():
|
def test_foo():
|
||||||
logger.info('text going to logger from call')
|
logger.info('text going to logger from call')
|
||||||
assert False
|
assert False
|
||||||
''')
|
''')
|
||||||
result = testdir.runpytest('--log-level=INFO')
|
result = testdir.runpytest('--log-level=INFO')
|
||||||
assert result.ret == 1
|
assert result.ret == 1
|
||||||
result.stdout.fnmatch_lines(['*- Captured *log setup -*',
|
result.stdout.fnmatch_lines(['*- Captured *log setup -*',
|
||||||
|
|
Loading…
Reference in New Issue