如何在python中附加日志

时间:2015-03-06 14:44:00

标签: python-2.7

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

有人可以帮助我获得预期的输出,在此先感谢

3 个答案:

答案 0 :(得分:1)

您的方法有两个主要缺点:

  1. 文件上应该只有一个记录器。如果您要使用os.system,则必须使用两个日志文件,因为您无法在file2.py中打开重复的Logger句柄。

  2. 您有不同的写入模式会导致竞争条件。可能是您的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'