Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python模块在直接运行时生成日志,但在通过`pytest运行时不生成日志`_Python_Logging_Python Watchdog - Fatal编程技术网

Python模块在直接运行时生成日志,但在通过`pytest运行时不生成日志`

Python模块在直接运行时生成日志,但在通过`pytest运行时不生成日志`,python,logging,python-watchdog,Python,Logging,Python Watchdog,我是python日志记录新手,希望为一个项目创建一个可靠的日志记录设置,使用watchdog来记录给定目录中DICOM文件的创建。我的项目结构是: planqa\ src\ watcher.py qa_logger.py logs\ qa_watch.log tests\ test_watchdog.py 到目前为止,我已经在qa\u logger.py中找到了一个日志记录LOGGING\

我是python日志记录新手,希望为一个项目创建一个可靠的日志记录设置,使用
watchdog
来记录给定目录中DICOM文件的创建。我的项目结构是:

planqa\
    src\
        watcher.py
        qa_logger.py
        logs\
            qa_watch.log
    tests\
        test_watchdog.py

到目前为止,我已经在
qa\u logger.py
中找到了一个
日志记录
LOGGING\u DICT
被导入到
watcher.py
(以及最终的其他模块),然后在
watcher.py
顶部附近,我放了以下几行:

logging.config.dictConfig(logging\u DICT)
logger=logging.getLogger()
当我运行
python watcher.py
时,所有日志都生成得很好。日志都打印到控制台并写入文件
src\Logs\qa_watch.log

运行
pytest
时会出现问题。根本不生成任何日志。然而,奇怪的是,如果文件
src\logs\qa_watch.log
不存在,就会创建该文件,但它从未写入(与我运行
python watcher.py
时不同)

我想使用
pytest
验证在监视文件夹中创建有效DICOM文件时,是否在
src\logs\qa_watch.log
中生成了日志

任何帮助都将不胜感激,包括关于如何更好地组织事情的任何意见!我仍在(而且永远都会)学习

编辑:日志级别不是问题。如果我对
watcher.py
中的日志使用
logger.warning()
而不是
logger.info()
,我也会遇到同样的问题

档案:

#qa_logger.py
导入日志记录
从logging.config导入dictConfig
导入操作系统
从os.path导入目录名,以pjoin的形式加入
导入系统
LOG_DIR=pjoin(dirname(dirname(_文件);“logs”)
日志记录\u DICT={
“版本”:1,
“禁用现有日志记录器”:False,
“格式化程序”:{
“f”:{
“格式”:“%(asctime)s%(名称)-12s%(levelname)-8s:%(消息)s”
}
},
“处理程序”:{
“控制台”:{
'class':'logging.StreamHandler',
“格式化程序”:“f”,
“级别”:logging.DEBUG
},
“文件”:{
'class':'logging.handlers.TimedRotatingFileHandler',
“级别”:logging.DEBUG,
“格式化程序”:“f”,
'filename':pjoin(LOG_DIR,“qa_watch.LOG”),
“何时”:“午夜”,
“间隔”:1,
“备份计数”:30
}
},
“根”:{
“处理程序”:[“控制台”,“文件”],
“级别”:logging.DEBUG,
},
}

#watcher.py
导入日志记录
从时间上导入睡眠
从os.path导入abspath、dirname、join as pjoin
从watchdog.Observer导入观察者
从watchdog.events导入PatternMatchingEventHandler
从src.qa_记录器导入日志记录
logging.config.dictConfig(logging\u DICT)
logger=logging.getLogger()
类NewFileHandler(PatternMatchingEventHandler):
模式=['*.dcm']
忽略模式=无
区分大小写=错误
忽略目录=True
已创建def(自身、事件):
msg=“捕获创建{}”。格式(event.src_路径)
logger.info(msg)
def watch_for_DICOM_在_文件夹中创建的_(文件夹=无):
如果文件夹为“无”:
folder=abspath(pjoin(dirname(dirname(_文件__)),“tests”,“data”))
dcm_handler=NewFileHandler()
观察者=观察者()
计划(dcm_处理程序,文件夹,递归=True)
observer.start()
logger.info(“----启动的观察者------”)
尝试:
尽管如此:
睡眠(1)
除键盘中断外:
停止
观察员加入
如果名称=“\uuuuu main\uuuuuuuu”:
查看文件夹()中创建的DICOM

#test_watchdog.py
导入日志记录
导入操作系统
从os.path导入目录名,以pjoin、isfile的形式加入
从多处理导入进程
从时间上导入睡眠
从src.watcher为在文件夹中创建的DICOM导入监视
从src.qa_记录器导入日志目录
DATA\u DIR=pjoin(dirname(\uuuuu file\uuuuuu),“DATA”)
LOG\u PATH=pjoin(LOG\u DIR,“qa\u watch.LOG”)
def test_watching_for_file_creation():
dcm_test_filepath=pjoin(数据目录,“a_dcm_to_catch.dcm”)
nondcm\u test\u filepath=pjoin(DATA\u DIR,“not\u a\u dcm\u to\u catch.txt”)
#Watcher在单独的进程中运行,否则后续代码将不会执行
watch1=进程(name='watch1',target=watch\u,用于在\u文件夹中创建的\u DICOM)
watch1.start()
dcm_测试_文件=打开(dcm_测试_文件路径“w”)
非配置测试文件=打开(非配置测试文件路径“w”)
dcm_测试_文件.close()
nondcm_test_file.close()
睡眠(0.2)#给观察者时间查看文件和创建日志文件
watch1.terminate()
断言isfile(日志路径)
打开(日志路径)作为日志文件:
在日志文件中断言dcm_测试_文件路径
在日志文件中不断言非CM_测试_文件路径
#清理
尝试:
删除操作系统(dcm\u测试\u文件路径)
删除操作系统(非CM\u测试\u文件路径)
除操作错误外:
通过
你试过了吗?@Charles,我试过那些文档,是的。但我可能错过了一些明显的东西。你试过了吗?@Charles,我试过那些医生,是的。但我可能错过了一些显而易见的东西。