有没有一种方法可以仅在必要时在内部存储所有日志记录历史记录并导出到文件?

时间:2019-04-19 20:26:30

标签: python python-3.x

我目前正在设计一个应用程序,其中调用特定函数“ export_log”将从一开始就输出与用户与该应用程序交互有关的所有以前的日志历史记录。我最初将所有日志存储在列表中,然后输出到文件中,但是我正在寻找一种更好的方法。我遇到了Python日志记录模块,该模块似乎很适合我的需求,但是我对使它正常工作有点不熟悉。

以下是我的最低工作示例。 func1基本上是记录器,每次由func2调用时都会输出“ foo”。目前,第一次运行该脚本时会创建一个空白文件。但是,第二次运行脚本会追加文件,但这是不期望的。我想存储从func1生成的所有以前的输出历史记录。

我应该怎么做才能确保export_log函数仅在按需调用时才输出日志文件?

import logging
global logger
logger = logging.getLogger('log_file')
logger.setLevel(logging.INFO)

#
def export_log():
    global logger
    fh = logging.FileHandler('logFile.log')
    fh.setLevel(logging.INFO)
    logger.addHandler(fh)

# run 3 times
def func1():
    global logger
    logger.info("foo")

def func2():
    for i in range(3):
        func1()

func2()
export_log()

# Desired output upon calling the export_log() function:
# foo
# foo
# foo

# Actual output:
# File is initially blank after running script once.
# always appends "foo" every time the script is run again

修改export_log函数是必需的,因为它由Tkinter按钮Button(controls, text="Export", command = export_log)调用。我基本上只想在单击按钮时才输出所有日志历史记录。

1 个答案:

答案 0 :(得分:0)

在这种情况下,一种可能的解决方案是将数据保存在lateinit中,并在按下按钮时将其保存在文件中:

io.StringIO()