Python日志输出到文件中。

4

我有一个 Python 函数,它会在终端输出一些内容。

以下是如何执行该函数:

python3 test.py

以下是来自该文件的一些代码:

column1 = "|=========="
        column2 = "|==============================================================="
        column3 = "|==================================="
        column4 = "|======================="

        print("\n"+column1+column2+column3+column4+"|")
        print("|SCRIPT ID    |SCRIPT NAME                                                       |Start Time                         |RUN ID             |")
        print(column1+column2+column3+column4+"|")

它会在终端上打印出以下内容:

|==========|===============================================================|===================================|=======================|
|SCRIPT ID    |SCRIPT NAME                                                       |Start Time                         | RUN ID             |
|==========|===============================================================|===================================|=======================|
|1         |TEST_SCRIPT                                    |2020-04-17 11:46:28.054074+05:30   |201                    |
|==========|===============================================================|===================================|=======================|

Entering - SCRIPT
     Verification Started
     Verification Completed in 0 Hours 00 Min 00.000602 sec
     Methods Execution Started
     Methods Execution Completed
EXITING - SCRIPT

我希望在一个日志文件中记录函数的输出。因此,如果我运行python3 test.py,它应该在名为logs的文件夹中创建一个名为test.py-202004171148.log 的文件,并将所有输出存储在其中。
我该怎么做呢?

从文件中添加了一些代码。 - dang
你可以直接执行以下命令:python3 test.py > filename.log - Rajarishi Devarajan
有没有可能在每次生成文件时不写入“filename.log”? - dang
时间戳 - test.py-202004171148.log - dang
@dang 我已经写了几行代码,可以作为你的脚本答案添加。希望能有所帮助。 - Rajarishi Devarajan
显示剩余4条评论
4个回答

3

使用日期时间保存文件:

import datetime
file = open(str(datetime.now().strftime('test.py-%Y%m%d%H%M%S.log')), "w")
file.write("yourlogs")
file.close()

1

要保存文件,您可以使用:

import datetime
file = open("test.py-"+str(datetime.datetime.now().timestamp())+".log", "w")
file.write("yourlogs")
file.close()

1
将以下几行代码添加到脚本顶部,即可将所有输出重定向到控制台并写入文件。
import sys
import datetime

class Printer(object):
    def __init__(self, *files):
        self.files = files
    def write(self, obj):
        for file in self.files:
            file.write(obj)
            file.flush()
    def flush(self):
        for file in self.files:
            file.flush()

f = open(f"{__file__}-{datetime.datetime.now().strftime('%Y%m%d%H%M%S')}.log", 'w')
sys.stdout = Printer(sys.stdout, f)

#Your print statements below
print("Hello world!")

我们可以将函数名称放在文件夹 - 日志中吗? - dang
另外,我可以在屏幕上打印并保存到文件吗? - dang
可以创建一个名为“logs”的文件夹,并将所有输出保存到其中。我会编辑我的答案以反映这一点。 - Rajarishi Devarajan
最好能够动态获取文件名。例如,如果它是test.py-20200417.log或abc.py-20200427.log。 - dang
这个会在屏幕上打印并存储到文件中吗? - dang
显示剩余5条评论

0
你可以使用logging模块来实现。你需要将print()替换为logging.info()logging.warning()logging.error(),具体取决于你所需的日志级别。
import logging
from datetime import datetime
fn = datetime.now().strftime('logs/test.py-%Y%m%d%H%M%S.log')
logging.basicConfig(filename=fn, level=logging.INFO)
logging.info('Entering - SCRIPT')
logging.info('etc...')

默认格式将在每条消息前缀中添加日志级别和记录器名称。如果您不想这样做,可以使用format进行覆盖。

logging.basicConfig(filename=fn, level=logging.INFO, format='%(message)s')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接