Python 为什么RotatingFileHandler附加到旧文件?

Python 为什么RotatingFileHandler附加到旧文件?,python,logging,Python,Logging,我有一个很好的日志设置,在这里我创建了一个文件的详细调试日志,同时显示了stdout的干净信息日志。我想在混合中获得旋转日志,所以我检查了这个建议:,(这正是我想要的)。问题是,我有一个类似的问题。有人能回答为什么在我的代码调用'doRollover()'之后,日志仍然被写入logtest.log.1吗 #logtest import sys, os, time, logging, logging.handlers log_file = r'/logs/test/logtest.log' n

我有一个很好的日志设置,在这里我创建了一个文件的详细调试日志,同时显示了stdout的干净信息日志。我想在混合中获得旋转日志,所以我检查了这个建议:,(这正是我想要的)。问题是,我有一个类似的问题。有人能回答为什么在我的代码调用'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={Empty}

logtest.log.1=
2019-02-25 14:15:01372-root-调试-日志于2019年2月25日星期一14:15:01关闭。
2019-02-25 14:15:01381-根目录-信息-新日志

编辑:由John Anderson指导的修复:

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!')

当我尝试运行代码时,我得到了
ValueError:“stream”或“filename”不应与“handlers”一起指定。
删除
filename=log\u文件后,
行并删除
log\u文件=r'/logs/test/logtest.log'
中的前导
/
,您的代码在Ubuntu 18.04上的Python 3.6.7上运行,与我预期的一样。您使用的是什么版本的
Python
,您的
OS
是什么?感谢John Anderson为我指出filename=log\u文件。我正在linux docker容器中使用python 2.7。我在没有使用logging.basicConfig()的情况下重写了记录器配置,并得到了预期的结果。