考虑以下代码:
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,然后最终将它们旋转掉。
我很可能在这里忽略了一些东西,但为了我的爱,我根本找不到问题。
希望这里有人能帮我出出主意,谢谢!
最佳答案
问题是您在设置处理程序后立即进行翻转。您并没有覆盖日志,您只是将当前日志归档到 pobsunc-1.log。只需删除
txt_handler.doRollover()
(更新)
由于 backupCount
默认为 0
,您对 doRollover 的调用不会创建 pobsync-1.log
,它确实会删除它。如果将 backupCount
设置为大于 0
,则轮换日志更有用。
关于python - 为什么 RotatingFileHandler 不附加到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26805223/