为什么RotatingFileHandler没有附加到文件

时间:2014-11-07 16:01:52

标签: python logging

请考虑以下代码:

def setup_logging(logdir=None, scrnlog=True, txtlog=True, loglevel=logging.DEBUG):
logdir = os.path.abspath(logdir)

if not os.path.exists(logdir):
    os.mkdir(logdir)

log = logging.getLogger('pobsync')
log.setLevel(loglevel)

log_formatter = logging.Formatter("%(asctime)s - %(levelname)s :: %(message)s")

if txtlog:
    txt_handler = RotatingFileHandler(os.path.join(logdir, "pobsync.log"), mode='a', maxBytes=100000)
    txt_handler.doRollover()
    txt_handler.setFormatter(log_formatter)
    log.addHandler(txt_handler)

if scrnlog:
    console_handler = logging.StreamHandler()
    console_handler.setFormatter(log_formatter)
    log.addHandler(console_handler)

日志记录本身运作良好;我只需用log.LEVEL()调用我的脚本,它就可以很好地记录到定义的日志文件中,就像我想要的那样。但是,由于某种原因,我的日志根本没有附加,但每次都会覆盖日志文件,而不是像它应该的那样附加到日志文件。 如果我在RotatingFileHandler中使用backupCount = $ number,它仍然不会附加,但会生成一个新的日志文件(在预期的RotatingFileHandler模​​式中),最多为$ number,然后最终将它们旋转。

我很可能在这里忽略了一些东西,但为了爱我,我根本找不到问题。

我希望这里有人可以帮助我,用cluebat打我,谢谢!

1 个答案:

答案 0 :(得分:3)

问题是您在设置处理程序后立即进行翻转。您没有覆盖日志,只是将当前日志存档到pobsunc-1.log。只需删除

txt_handler.doRollover()

请参阅rotatingfilehandler

(更新)

由于backupCount默认为0,因此您对doRollover的调用并不会创建pobsync-1.log,它确实会删除它。如果将backupCount设置为大于0,则轮播日志会更有用。