Python 日志记录:如果不存在,则创建日志,如果存在,则打开并继续日志记录

Python logging: create log if not exists or open and continue logging if it does

提问人:CiaranWelsh 提问时间:1/20/2017 最后编辑:DennisLiCiaranWelsh 更新时间:6/6/2023 访问量:58781

问:

我正在编写一些使用 python 系统的代码。这个想法是,如果尚不存在,请创建日志,但如果存在,则获取日志并继续记录到该文件。这是我的代码:loggingLOG

import logging
import os

log_filename='Transactions.log')
if os.path.isfile(log_filename)!=True:
    LOG = logging.getLogger('log_filename')
    LOG.setLevel(logging.DEBUG)
    # create file handler which logs even debug messages
    fh = logging.FileHandler('log_filename')
    fh.setLevel(logging.DEBUG)
    # create console handler with a higher log level
    ch = logging.StreamHandler()
    ch.setLevel(logging.DEBUG)
    # create formatter and add it to the handlers
    formatter = logging.Formatter('-->%(asctime)s - %(name)s:%(levelname)s - %(message)s')
    fh.setFormatter(formatter)
    ch.setFormatter(formatter)
    # add the handlers to the logger
    LOG.addHandler(fh)
    LOG.addHandler(ch)
else:
    LOG=logging.getLogger()

我怀疑问题出在我的块上,但我不知道如何解决。谁能说明这种情况。else

python filehandler python-logging

评论

0赞 mic4ael 1/20/2017
设置一次记录器,然后从您想要的任何地方导入,无需检查日志文件是否存在LOG

答:

42赞 hjpotter92 1/20/2017 #1

日志记录模块会为您处理这个问题。无需复杂性。FileHandler

处理程序采用一个可选参数,以指定它是开始写入数据还是向其追加数据。mode

文档中

class logging.FileHandler(filename, mode='a', encoding=None, delay=False)

指定的文件将被打开并用作日志记录的流。如果未指定,则使用。mode'a'

评论

40赞 mightypile 4/8/2018
如果该目录不存在,您仍会收到异常。日志记录很乐意为您创建一个新文件,但不是整个目录结构。
1赞 UserK 6/5/2018
如果不存在,@CiaranWelsh应指定哪种模式才能创建文件?
4赞 hjpotter92 6/5/2018
@UserK如果文件不存在,则可以或也可以。 将在下次运行时追加到同一文件,而 mode 将删除旧文件并创建一个全新的文件。另请阅读上面@mightypile评论的内容。awaw
0赞 user8491363 7/30/2020
在 Python 2.7 上,它似乎不起作用。 找不到路径,除非您显式使用FileHandleros.makedirs()
0赞 Angelo 7/24/2018 #2

跑步时

LOG = logging.getLogger('log_filename')

首次创建全局变量。 因此,您还可以将以下代码添加到上面的脚本中:

global LOG
if LOG is not None:
    print("found logger !")
else:
    ("no global variable logger found")
34赞 lotrgollum87 3/20/2019 #3

对于任何试图创建新目录结构的人,如@mightypile提到的,FileHandler 不会为您创建新的目录结构。我曾经确保目录结构。logs/mylogfile.logos.makedirs

import os
import logging

log_filename = "logs/output.log"
os.makedirs(os.path.dirname(log_filename), exist_ok=True)
file_handler = logging.FileHandler(output_filename, mode="w", encoding=None, delay=False)

评论

0赞 hackinghorn 11/21/2023
谢谢!我相信它在最后一行log_filename