我有一个很好的日志记录设置,可以在文件中创建详细的调试日志,同时将干净的信息日志记录显示到标准输出。我想将旋转日志混合在一起,所以我查看了这个建议:stack post ,(这正是我想要的)。问题是,我遇到了与 other stack post 类似的问题。谁能回答为什么在我的代码调用“doRollover()”之后,日志仍然被写入logtest.log.1?
#logtest
import sys, os, time, logging, logging.handlers
log_file = r'/logs/test/logtest.log'
needRoll = os.path.isfile(log_file)
rotater=logging.handlers.RotatingFileHandler(log_file, backupCount=5)
log = logging.getLogger()
logging.basicConfig(
filename=log_file,
level='DEBUG',
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
handlers=[rotater])
stdout_handler = logging.StreamHandler(sys.stdout)
stdout_handler.setLevel(logging.INFO)
log.addHandler(stdout_handler)
if needRoll:
log.debug("Log closed on %s." %time.asctime())
rotater.doRollover()
log.info('New Log!')
结果:
logtest.log = {空}
logtest.log.1 =
2019-02-25 14:15:01,372 - 根 - 调试 - 日志于 2019 年 2 月 25 日星期一 14:15:01 关闭。
2019-02-25 14:15:01,381 - 根 - 信息 - 新日志!
编辑:由约翰·安德森指导修复:
log_file = r'/logs/test/logtest.log'
needRoll = os.path.isfile(log_file)
log = logging.getLogger()
log.setLevel(logging.DEBUG)
rotater=logging.handlers.RotatingFileHandler(log_file, backupCount=5)
rotater.setLevel(logging.DEBUG)
rotater.setFormatter(logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s"))
log.addHandler(rotater)
stdout_handler = logging.StreamHandler(sys.stdout)
stdout_handler.setLevel(logging.INFO)
log.addHandler(stdout_handler)
if needRoll:
log.debug("Log closed for next run on %s." %time.asctime())
rotater.doRollover()
log.info('New Log!')
最佳答案
约翰·安德森(John Anderson)向我展示了在 basicConfig() 函数中设置文件名可能会导致问题,从而为我指明了正确的方向。我在没有它的情况下重写了日志记录,并且工作正常。
log_file = r'/logs/test/logtest.log'
needRoll = os.path.isfile(log_file)
log = logging.getLogger()
log.setLevel(logging.DEBUG)
rotater=logging.handlers.RotatingFileHandler(log_file, backupCount=5)
rotater.setLevel(logging.DEBUG)
rotater.setFormatter(logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s"))
log.addHandler(rotater)
stdout_handler = logging.StreamHandler(sys.stdout)
stdout_handler.setLevel(logging.INFO)
log.addHandler(stdout_handler)
if needRoll:
log.debug("Log closed for next run on %s." %time.asctime())
rotater.doRollover()
log.info('New Log!')
关于python - 为什么 RotatingFileHandler 附加到旧文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54873439/