返回介绍

记录日志到文件中

发布于 2025-01-02 21:53:51 字数 1537 浏览 0 评论 0 收藏 0

通过电子邮件来接收错误提示非常棒,但在其他场景下,有时候就有些不足了。有些错误条件既不是一个 Python 异常又不是重大事故,但是他们在调试的时候也是有足够用处的。为此,我将会为本应用维持一个日志文件。

为了启用另一个基于文件类型 RotatingFileHandler 的日志记录器,需要以和电子邮件日志记录器类似的方式将其附加到应用的 logger 对象中。

# ...
from logging.handlers import RotatingFileHandler
import os

# ...

if not app.debug:
    # ...

    if not os.path.exists('logs'):
        os.mkdir('logs')
    file_handler = RotatingFileHandler('logs/microblog.log', maxBytes=10240,
                                       backupCount=10)
    file_handler.setFormatter(logging.Formatter(
        '%(asctime)s %(levelname)s: %(message)s [in %(pathname)s:%(lineno)d]'))
    file_handler.setLevel(logging.INFO)
    app.logger.addHandler(file_handler)

    app.logger.setLevel(logging.INFO)
    app.logger.info('Microblog startup')

日志文件的存储路径位于顶级目录下,相对路径为 logs/microblog.log ,如果其不存在,则会创建它。

RotatingFileHandler 类非常棒,因为它可以切割和清理日志文件,以确保日志文件在应用运行很长时间时不会变得太大。 本处,我将日志文件的大小限制为 10KB,并只保留最后的十个日志文件作为备份。

logging.Formatter 类为日志消息提供自定义格式。 由于这些消息正在写入到一个文件,我希望它们可以存储尽可能多的信息。 所以我使用的格式包括时间戳、日志记录级别、消息以及日志来源的源代码文件和行号。

为了使日志记录更有用,我还将应用和文件日志记录器的日志记录级别降低到 INFO 级别。 如果你不熟悉日志记录类别,则按照严重程度递增的顺序来认识它们就行了,分别是 DEBUGINFOWARNINGERRORCRITICAL

日志文件的第一个有趣用途是,服务器每次启动时都会在日志中写入一行。 当此应用在生产服务器上运行时,这些日志数据将告诉你服务器何时重新启动过。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文