如何在Python中追加日志

Har*_*udi 9 python-2.7

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'两个文件中使用。


msw*_*msw 5

您的方法有两个主要错误:

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

  2. 您有不同的写入模式,这会导致竞争条件。可能是您filemode='a'完成了所有写入,然后filemode='w'从头开始覆盖日志文件,清除了所有先前写入的“file2”日志输出。