【问题标题】:Automatically delete logs in Django自动删除 Django 中的日志
【发布时间】:2020-10-18 10:24:58
【问题描述】:

构建一个 Django 应用程序,我试图找出自动删除日志文件的最佳方法。

到目前为止,我的尝试是构建一个删除旧日志的管理命令。由此我可以在 python 或服务器级别设置调度程序,但我对这个选项不太满意,因为它在部署期间需要执行更多配置步骤。

我想知道子类化日志模块以在日志写入时触发删除日志功能是否是个好主意。优点是没有设置进行部署,缺点是如果长时间没有日志记录,依靠日志写入来清理日志目录可能无用。另一方面,如果日志记录过多,则可能会消耗资源。

首先,由任何操作触发的日志删除是个好主意吗?最好选择什么操作(每天一次)?

如果不是,以漂亮的方式执行此操作的最佳选择是什么?

【问题讨论】:

    标签: python django logging


    【解决方案1】:

    Web 框架的主要目的是处理 Web 请求。这里的日志记录是一种子系统,用于创建面包屑以了解已完成和未完成的操作。子系统的最佳匹配是单独的日志服务,即系统日志。您是否尝试过将日志写入系统并使用系统提供的日志轮换机制进行轮换?

    【讨论】:

    • 现在我还在做开发所以没有系统。我希望 Django 可以执行轮换,但我不确定是否可以完成。
    • 实际上在处理程序设置中使用RotatingFileHandler似乎是可能的
    【解决方案2】:

    这是我的解决方案,

    首先忘记管理命令和调度程序,

    然后我设置了我的日志文件处理程序如下:

        'handlers': {
    
            ...
            'log_file':{
                'level': 'INFO',
                'class': 'logging.handlers.TimedRotatingFileHandler',
                'when': 'D',
                'interval': 1,
                'backupCount': 3,
                'encoding': 'utf8',
                'filename': os.path.join(log_path, log_name),
                'formatter': 'verbose',
            },
            'mail_admins': {
                'level': 'ERROR',
                'filters': ['require_debug_false'],
                'class': 'django.utils.log.AdminEmailHandler',
                'include_html': True,
            }
        },
    

    使用 TimedRotatingFileHandler

    • 'when': 'D', 表示我每天轮换日志
    • 'interval':1,表示每1天轮换一次
    • 'backupCount': 3, 表示我想在日志删除前保留 3 天的历史记录

    【讨论】:

    • 在文件写入方面再花 2 美分 缺点:多进程写入可能会出现问题,并且文件系统中的 I/O 等待会变慢。
    猜你喜欢
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 2021-10-18
    • 1970-01-01
    • 2014-06-15
    • 2015-05-14
    • 2018-05-20
    相关资源
    最近更新 更多