Python 2.7 如何在python中附加日志
python项目中有两个名为file1和file2的文件 在file1.py中,Iam将日志捕获到文件“sample.log”,并通过os.system()命令执行file2.py。 在file2.py中,我以追加模式打开示例日志文件sample.log,并将日志发送到该文件 我已经执行了file1.py,即使我在append模式下打开了日志文件(file2.py),我也无法看到file2.py日志。 File2内容被file1内容覆盖 如何在sample.log中附加file2.py日志和file1.py日志 file1.pyPython 2.7 如何在python中附加日志,python-2.7,Python 2.7,python项目中有两个名为file1和file2的文件 在file1.py中,Iam将日志捕获到文件“sample.log”,并通过os.system()命令执行file2.py。 在file2.py中,我以追加模式打开示例日志文件sample.log,并将日志发送到该文件 我已经执行了file1.py,即使我在append模式下打开了日志文件(file2.py),我也无法看到file2.py日志。 File2内容被file1内容覆盖 如何在sample.log中附加file2.py日志和fi
import logging
import os
logFile = 'sample.log'
logging.basicConfig( filename = logFile,filemode = 'w',level = logging.DEBUG,format = '%(asctime)s - %(levelname)s: %(message)s',\
datefmt = '%m/%d/%Y %I:%M:%S %p' )
logging.debug("Starting of the file1")
os.system("python file2.py")
for i in range(0,2):
logging.debug("Iam in file1")
file2.py:
import logging
logFile = 'sample.log'
logging.basicConfig( filename = logFile,filemode = 'a',level = logging.DEBUG,format = '%(asctime)s - %(levelname)s: %(message)s',\
datefmt = '%m/%d/%Y %I:%M:%S %p' )
for i in range(0,2):
logging.debug("Iam in file2")
需要这样的输出吗
2015年6月3日08:02:03 PM-调试:启动文件1
2015年6月3日08:02:03 PM-调试:文件2中的Iam
2015年6月3日08:02:03 PM-调试:文件2中的Iam
2015年6月3日08:02:03 PM-调试:文件1中的Iam
2015年6月3日08:02:03 PM-调试:文件1中的Iam
但是像这样:
2015年6月3日08:02:49 PM-调试:启动文件1
2015年6月3日08:02:49 PM-调试:文件1中的Iam
2015年6月3日08:02:49 PM-调试:文件1中的Iam
有人能帮我得到我的预期结果吗,提前谢谢你的方法有两个主要缺点:
os.system
,则必须使用两个日志文件,因为无法在file2.py中打开重复的记录器句柄filemode='a'
完成了所有写入,然后filemode='w'
从一开始就覆盖日志文件,清除所有以前写入的“file2”日志输出这是一个bug,但我怀疑他们会在2.7中修复它,因为它将在2020年下线。您只能从
file1
中获取日志(有时在日志文件末尾从file2
中获得几行日志),因为每当file2向日志写入内容时,它(大致上)都会首先查找到文件末尾,然后写入数据(filemode='a'
)但是当file1
写入文件时,它只写入数据,并且它在文件中的位置不会更新,它会覆盖file2
中的任何行(filemode='w'
)
您需要在两个文件中使用
filemode='a'
。1.无法将两个文件(file1.py和file2.py)日志捕获到同一个日志中。是的,请参见我的答案。但是@msw是正确的,它不能保证安全(除非底层系统能够提供这样的保证,因为我认为python不会考虑),尽管对于简单的用例,可以轻松地实现所需的输出。它仍然会覆盖文件。我是否应该添加除上述命令之外的任何内容,以便在python 3.6中附加相同的日志文件?
handler=logging.FileHandler(log_filename, 'w')
handler=logging.FileHandler(log_filename, 'w+')