25

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

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块上,但我不知道如何解决。任何人都可以对这种情况有所了解。

4

3 回答 3

31

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

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

文档

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

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

于 2017-01-20T13:37:27.880 回答
24

对于任何试图创建新目录结构的人logs/mylogfile.log,如@mightypile 提到的,FileHandler 不会为您创建新的目录结构。我用来os.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)
于 2019-03-19T19:24:21.047 回答
0

当你跑

LOG = logging.getLogger('log_filename')

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

global LOG
if LOG is not None:
    print("found logger !")
else:
    ("no global variable logger found")
于 2018-07-24T12:49:56.370 回答