* Fixes issue #11314 - * Incorporated review comments for issue #11314 * Update changelog/11314.improvement.rst Co-authored-by: Bruno Oliveira <bruno@soliv.dev> --------- Co-authored-by: Zac Hatfield-Dodds <zac.hatfield.dodds@gmail.com> Co-authored-by: Bruno Oliveira <bruno@soliv.dev>
This commit is contained in:
parent
8bac8d7807
commit
9a58e6283d
1
AUTHORS
1
AUTHORS
|
@ -345,6 +345,7 @@ Segev Finer
|
||||||
Serhii Mozghovyi
|
Serhii Mozghovyi
|
||||||
Seth Junot
|
Seth Junot
|
||||||
Shantanu Jain
|
Shantanu Jain
|
||||||
|
Sharad Nair
|
||||||
Shubham Adep
|
Shubham Adep
|
||||||
Simon Gomizelj
|
Simon Gomizelj
|
||||||
Simon Holesch
|
Simon Holesch
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Logging to a file using the ``--log-file`` option will use ``--log-level``, ``--log-format`` and ``--log-date-format`` as fallback
|
||||||
|
if ``--log-file-level``, ``--log-file-format`` and ``--log-file-date-format`` are not provided respectively.
|
|
@ -303,13 +303,13 @@ def pytest_addoption(parser: Parser) -> None:
|
||||||
add_option_ini(
|
add_option_ini(
|
||||||
"--log-file-format",
|
"--log-file-format",
|
||||||
dest="log_file_format",
|
dest="log_file_format",
|
||||||
default=DEFAULT_LOG_FORMAT,
|
default=None,
|
||||||
help="Log format used by the logging module",
|
help="Log format used by the logging module",
|
||||||
)
|
)
|
||||||
add_option_ini(
|
add_option_ini(
|
||||||
"--log-file-date-format",
|
"--log-file-date-format",
|
||||||
dest="log_file_date_format",
|
dest="log_file_date_format",
|
||||||
default=DEFAULT_LOG_DATE_FORMAT,
|
default=None,
|
||||||
help="Log date format used by the logging module",
|
help="Log date format used by the logging module",
|
||||||
)
|
)
|
||||||
add_option_ini(
|
add_option_ini(
|
||||||
|
@ -635,7 +635,9 @@ class LoggingPlugin:
|
||||||
self.report_handler.setFormatter(self.formatter)
|
self.report_handler.setFormatter(self.formatter)
|
||||||
|
|
||||||
# File logging.
|
# File logging.
|
||||||
self.log_file_level = get_log_level_for_setting(config, "log_file_level")
|
self.log_file_level = get_log_level_for_setting(
|
||||||
|
config, "log_file_level", "log_level"
|
||||||
|
)
|
||||||
log_file = get_option_ini(config, "log_file") or os.devnull
|
log_file = get_option_ini(config, "log_file") or os.devnull
|
||||||
if log_file != os.devnull:
|
if log_file != os.devnull:
|
||||||
directory = os.path.dirname(os.path.abspath(log_file))
|
directory = os.path.dirname(os.path.abspath(log_file))
|
||||||
|
|
|
@ -77,14 +77,14 @@ def test_root_logger_affected(pytester: Pytester) -> None:
|
||||||
assert "warning text going to logger" not in stdout
|
assert "warning text going to logger" not in stdout
|
||||||
assert "info text going to logger" not in stdout
|
assert "info text going to logger" not in stdout
|
||||||
|
|
||||||
# The log file should contain the warning and the error log messages and
|
# The log file should only contain the error log messages and
|
||||||
# not the info one, because the default level of the root logger is
|
# not the warning or info ones, because the root logger is set to
|
||||||
# WARNING.
|
# ERROR using --log-level=ERROR.
|
||||||
assert os.path.isfile(log_file)
|
assert os.path.isfile(log_file)
|
||||||
with open(log_file, encoding="utf-8") as rfh:
|
with open(log_file, encoding="utf-8") as rfh:
|
||||||
contents = rfh.read()
|
contents = rfh.read()
|
||||||
assert "info text going to logger" not in contents
|
assert "info text going to logger" not in contents
|
||||||
assert "warning text going to logger" in contents
|
assert "warning text going to logger" not in contents
|
||||||
assert "error text going to logger" in contents
|
assert "error text going to logger" in contents
|
||||||
|
|
||||||
|
|
||||||
|
@ -1331,3 +1331,62 @@ def test_date_format_percentf_tz_log(pytester: Pytester) -> None:
|
||||||
result.stdout.re_match_lines(
|
result.stdout.re_match_lines(
|
||||||
[r"^[0-9-]{10} [0-9:]{8}.[0-9]{6}[+-][0-9\.]+; WARNING; text"]
|
[r"^[0-9-]{10} [0-9:]{8}.[0-9]{6}[+-][0-9\.]+; WARNING; text"]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_log_file_cli_fallback_options(pytester: Pytester) -> None:
|
||||||
|
"""Make sure that fallback values for log-file formats and level works."""
|
||||||
|
pytester.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 = str(pytester.path.joinpath("pytest.log"))
|
||||||
|
result = pytester.runpytest(
|
||||||
|
"--log-level=ERROR",
|
||||||
|
"--log-format=%(asctime)s %(message)s",
|
||||||
|
"--log-date-format=%H:%M",
|
||||||
|
"--log-file=pytest.log",
|
||||||
|
)
|
||||||
|
assert result.ret == 1
|
||||||
|
|
||||||
|
# The log file should only contain the error log messages
|
||||||
|
# not the warning or info ones and the format and date format
|
||||||
|
# should match the formats provided using --log-format and --log-date-format
|
||||||
|
assert os.path.isfile(log_file)
|
||||||
|
with open(log_file, encoding="utf-8") as rfh:
|
||||||
|
contents = rfh.read()
|
||||||
|
assert re.match(r"[0-9]{2}:[0-9]{2} error text going to logger\s*", contents)
|
||||||
|
assert "info text going to logger" not in contents
|
||||||
|
assert "warning text going to logger" not in contents
|
||||||
|
assert "error text going to logger" in contents
|
||||||
|
|
||||||
|
# Try with a different format and date format to make sure that the formats
|
||||||
|
# are being used
|
||||||
|
result = pytester.runpytest(
|
||||||
|
"--log-level=ERROR",
|
||||||
|
"--log-format=%(asctime)s : %(message)s",
|
||||||
|
"--log-date-format=%H:%M:%S",
|
||||||
|
"--log-file=pytest.log",
|
||||||
|
)
|
||||||
|
assert result.ret == 1
|
||||||
|
|
||||||
|
# The log file should only contain the error log messages
|
||||||
|
# not the warning or info ones and the format and date format
|
||||||
|
# should match the formats provided using --log-format and --log-date-format
|
||||||
|
assert os.path.isfile(log_file)
|
||||||
|
with open(log_file, encoding="utf-8") as rfh:
|
||||||
|
contents = rfh.read()
|
||||||
|
assert re.match(
|
||||||
|
r"[0-9]{2}:[0-9]{2}:[0-9]{2} : error text going to logger\s*", contents
|
||||||
|
)
|
||||||
|
assert "info text going to logger" not in contents
|
||||||
|
assert "warning text going to logger" not in contents
|
||||||
|
assert "error text going to logger" in contents
|
||||||
|
|
Loading…
Reference in New Issue