我正在编写一些使用python logging
系统的代码.我们的想法是,如果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
阻止,但我不知道如何解决.任何人都可以对这种情况有所了解.
记录模块FileHandler
会为您处理.不需要复杂性.
处理程序采用可选mode
参数,以指定它是开始写入还是向其附加数据.
来自文档:
class logging.FileHandler(filename, mode='a', encoding=None, delay=False)
打开指定的文件并将其用作日志记录的流.如果
mode
未指定,'a'
则使用.
对于任何尝试创建新目录结构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)