pytest日志记录文件处理程序未设置



我在创建一个日志对象的包中有一个Python方法。该方法的代码如下。

import logging
import os
def get_logger(file = None, level="DEBUG"):
logFileName = ""
if file:
logFileName = file
else:
logFileName = f"{os.getcwd()}/logging.log" #test where CWD is when running in zena
logging.basicConfig(format = '%(asctime)s,%(msecs)d %(name)s %(levelname)s %(message)s',
handlers=[
logging.FileHandler(logFileName),
logging.StreamHandler(sys.stdout)
])
logger = logging.getLogger("root")
logger.setLevel(level)
return logger

我有一个为这个get_logger()方法编写的pytest

from common_functions import common_functions as app
import os
def test_get_logger_no_file_provided(caplog):
#test log file creation w/ no file path provided
file = f"{os.getcwd()}/logging.log"
if os.path.exists(file):
os.remove(file)
#test logging to log file w/ no file provided

logger = app.get_logger()
assert(os.path.exists(file))
origSize = os.path.getsize(file)
logger.warning("Test logging statement for size")
newSize = os.path.getsize(file)
assert 'Test logging statement for size' in caplog.text #check to make sure logger worked
assert(origSize != newSize) #check to make sure logger wrote to file
os.remove(file)

基本上,我要做的是检查在get_logger()中创建的记录器是否真的写入了日志文件。当我在pytest之外运行这个方法时,它就起作用了。在使用pytest运行代码时,我是否缺少为记录器设置文件处理程序的功能?在最终assert上测试失败。

如果调试此代码,我会看到记录器对象文件处理程序被设置为baseFileName\\.\nul

我有相同的设置:

logging.basicConfig(
logging.FileHandler(log_file_path),
logging.StreamHandler(stream=sys.stdout)
)

我把它们改成:

logger = logging.getLogger("my-logger")
logger.setLevel(loglevel)
logger.addHandler(logging.FileHandler(log_file_path))
logger.addHandler(logging.StreamHandler(stream=sys.stdout))

现在我的测试又开始了。我认为pytest也有一些可能冲突的记录器。

相关内容

最新更新