[英]pytest Logging File Handler Not Set
我正在創建的包中有一個 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
上失敗。
如果我調試此代碼,我會看到記錄器對象文件處理程序設置為\\\\.\\nul
的baseFileName
。
我有相同的設置:
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 也有一些可能發生沖突的記錄器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.