簡體   English   中英

pytest 日志文件處理程序未設置

[英]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上失敗。

如果我調試此代碼,我會看到記錄器對象文件處理程序設置為\\\\.\\nulbaseFileName

我有相同的設置:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM