python - 为什么 RotatingFileHandler 不附加到文件

标签 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,然后最终将它们旋转掉。

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

希望这里有人能帮我出出主意,谢谢!

最佳答案

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

txt_handler.doRollover()

参见 rotatingfilehandler

(更新)

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

关于python - 为什么 RotatingFileHandler 不附加到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26805223/

相关文章:

java - 1 服务器 2 Tomcat 1 文档库 1 日志文件 - 此设置会导致日志丢失吗?

python - VSCode 没有选择 ipykernel

python - 如何知道类中定义了哪些变量

python - 使用 python 使用 excel 时出错

python - 如何使用 Splunk-Python SDK 将 'time' 查询传递给 splunk 企业?

ruby-on-rails - 有什么方法可以让每个请求在 Rails 日志中分开?

date - 计划任务日志到以当前日期命名的文件

python - 分发用 Python 编写的程序

python - 在 gunicorn 中运行时,Flask 应用程序记录器无法正常工作

sql - 如何显示 RSpec 测试生成的 SQL 查询日志?