请考虑以下代码:
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打我,谢谢!
答案 0 :(得分:3)
问题是您在设置处理程序后立即进行翻转。您没有覆盖日志,只是将当前日志存档到pobsunc-1.log。只需删除
txt_handler.doRollover()
(更新)
由于backupCount
默认为0
,因此您对doRollover的调用并不会创建pobsync-1.log
,它确实会删除它。如果将backupCount
设置为大于0
,则轮播日志会更有用。