python项目中有两个名为file1和file2的文件。
在file1.py中,我将日志捕获到文件'sample.log'并通过os.system()命令执行file2.py. 在file2.py中,我在附加模式下打开示例日志文件sample.log并将日志发送到该文件。
我已经执行了file1.py,即使我已经在追加模式下打开了日志文件(file2.py),我也无法看到file2.py日志。 File2的内容被file1内容覆盖。
如何在file.log日志中附加带有file1.py日志的file2.py日志?
file1.py
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")
需要像这样的输出
03/06/2015 08:02:03 PM - 调试:启动file1
03/06/2015 08:02:03 PM - DEBUG:Iam in file2
03/06/2015 08:02:03 PM - DEBUG:Iam in file2
03/06/2015 08:02:03 PM - DEBUG:Iam in file1
03/06/2015 08:02:03 PM - DEBUG:Iam in file1
但是这样:
03/06/2015 08:02:49 PM - 调试:启动file1
03/06/2015 08:02:49 PM - DEBUG:Iam in file1
03/06/2015 08:02:49 PM - DEBUG:Iam in file1
有人可以帮助我获得预期的输出,在此先感谢
答案 0 :(得分:1)
您的方法有两个主要缺点:
文件上应该只有一个记录器。如果您要使用os.system
,则必须使用两个日志文件,因为您无法在file2.py中打开重复的Logger句柄。
您有不同的写入模式会导致竞争条件。可能是您的filemode='a'
完成了所有写入操作,然后filemode='w'
从一开始就覆盖了日志文件,清除了之前写入的所有“file2”日志记录输出。
答案 1 :(得分:0)
两者
handler=logging.FileHandler(log_filename, 'w')
和
handler=logging.FileHandler(log_filename, 'w+')
总是在Windows和Linux上都添加Python 2.7。
这是一个错误,但是我怀疑他们会在2.7中修复它,因为它将在2020年停产。
答案 2 :(得分:0)
您仅从file1
获得日志(有时在日志文件的末尾从file2
获得几行),因为每当file2向日志中写入内容时,它(大约)首先会查找到末尾文件,然后写入数据(filemode='a'
),但是当file1
写入文件时,它仅写入数据,并且其在文件中的位置未更新,并且覆盖了file2
中的任何行(filemode='w'
。
您想要的是在两个文件中使用filemode='a'
。