Structlog和日志模块没有使用pytest进行日志记录



所以我有一个测试文件夹结构(测试模块src,这里没有显示),像这样:

├── tests
│   ├── __init__.py
│   ├── conftest.py
│   ├── test_main.py

__init__.py配置我的日志,如下所示:

import structlog, logging, sys
from structlog.testing import LogCapture
logging.basicConfig(filename="test.log", filemode="w")
structlog.configure(
processors=[LogCapture()],
context_class=structlog.threadlocal.wrap_dict(dict),
logger_factory=structlog.stdlib.LoggerFactory(),
cache_logger_on_first_use=True
)

和我的test_main.py如下所示:

import logging, structlog, pytest
from src.factories.factories import MyFactory
import src.main
from pathlib import Path
from datetime import datetime
@pytest.mark.parametrize(
"factory",
[
MyFactory(),
],
)
def test_main(path_to_results_folder_fixture_in_conftest, factory):
structlog.get_logger().info("test")
no_of_files_function = lambda: sum(1 for _ in Path(path_to_results_folder_fixture_in_conftest).iterdir())
len_before = no_of_files_function()
src.main.main("sony", factory, path_to_results_folder)
assert no_of_files_function() == len_before + 1

然后运行pytest test_main.py。我期待structlog.get_logger().info("test")生产线生产test.log中的test生产线。但是,只生成了一个空的test.log。我做错了什么?我已经配置了日志记录,但是structlog似乎没有看到它。要了解更多信息,也没有输出到stdout/console。

如果您将structlog配置为使用LogCapture,它将捕获日志条目而不是打印它们—这就是它的全部目的。参见https://www.structlog.org/en/latest/testing.html

最新更新