python项目中有两个文件,名为file1和file2。
在 file1.py 中,我将日志捕获到文件“sample.log”并通过 os.system() 命令执行 file2.py 。在 file2.py 中,我以附加模式打开示例日志文件 example.log 并将日志发送到该文件。
我已经执行了 file1.py,即使我以追加模式打开了日志文件(file2.py),我也无法看到 file2.py 日志。文件 2 的内容被文件 1 的内容覆盖。
如何在 Sample.log 中附加 file2.py 日志和 file1.py 日志?
文件1.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")
Run Code Online (Sandbox Code Playgroud)
文件2.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")
Run Code Online (Sandbox Code Playgroud)
需要这样的输出
2015 年 3 月 6 日 08:02:03 PM - 调试:文件开始 1
03/06/2015 08:02:03 PM - 调试:Iam 在 file2 中
03/06/2015 08:02:03 PM - 调试:Iam 在 file2 中
2015 年 3 月 6 日 08:02:03 PM - 调试:Iam 在 file1 中
2015 年 3 月 6 日 08:02:03 PM - 调试:Iam 在 file1 中
但变得像这样:
2015 年 3 月 6 日 08:02:49 PM - 调试:文件开始 1
2015 年 3 月 6 日 08:02:49 PM - 调试:Iam 在 file1 中
2015 年 3 月 6 日 08:02:49 PM - 调试:Iam 在 file1 中
有人可以帮助我获得预期的输出吗,提前致谢
ner*_*ert 11
您只能从中获取日志file1
(有时从file2
日志文件末尾获取几行),因为每当 file2 向日志写入内容时,它(大致)首先查找文件末尾,然后写入数据 ( filemode='a'
) 但当file1
写入时该文件仅写入数据,其在文件中的位置不会更新,并且会覆盖file2
( filemode='w'
) 中的任何行。
您想要的是filemode='a'
在两个文件中使用。
您的方法有两个主要错误:
一个文件上应该只有一个记录器。如果您要使用,os.system
则必须使用两个日志文件,因为您无法在 file2.py 中打开重复的 Logger 句柄。
您有不同的写入模式,这会导致竞争条件。可能是您filemode='a'
完成了所有写入,然后filemode='w'
从头开始覆盖日志文件,清除了所有先前写入的“file2”日志输出。