• Django 创建并存储一个自定义的日志文件


    需求

    在处理数据导入任务时,产生了大量处理错误的信息,需要把他们记录下来,供日后审计

    • 在第一版中,采用了json的形式存在在mysql数据库中,这就会造成一个页面难以审阅的问题
    • 这次计划改成存储到文件,这就需要考虑如何避免傻白甜的先创建一个文件、再存储、再写入的繁琐操作。这里使用ContentFile,ContentFile可以提供给你一个不存在的文件,让你先写入一些内容,

    具体实现

    • 将日志写入文件的主要代码 task.py
    from django.core.files.base import ContentFile
    # 主要逻辑:如果不存在日志文件,则创建一个日志文件;否则,直接追加写入一条日志
    def write_import_log(obj, phone, error, header_index):
        while True:
            if not obj.error_log:
                error_file = ContentFile("")
                error_file.name = "erro_log.txt"
                obj.error_log = error_file
                obj.save()
                continue
            else:
                with open(obj.error_log.path, "a", encoding="utf-8") as error_file_obj:
                    error_file_obj.write(f"index: {header_index};msg: {str(error)};phone:{str(phone)}
    ")
                break
    
    • 将此表也放在这里供参考 models.py:
    class StatusChoices(models.IntegerChoices):
        AA = 1, "已上传,等待处理"
        BB = 2, "正在处理导入"
        DD = 3, "导入完成"
    
    
    class ImportData(models.Model):
        date = models.DateTimeField(auto_now_add=True,null=True,verbose_name="文件上传时间")
        status_date = models.DateTimeField(auto_now=True,verbose_name="状态更新时间")
        file = models.FileField(upload_to="import", verbose_name="文件")
        status = models.PositiveSmallIntegerField(choices=StatusChoices.choices,null=True,verbose_name="程序状态")
        error_log = models.FileField(upload_to="import_log", null=True, verbose_name="错误日志")
    
        class Meta:
            verbose_name_plural = verbose_name = '数据导入'
            ordering = ["-date"]
    
    • 最终效果:
      image
  • 相关阅读:
    监听器
    过滤器
    连接池与分页
    jdbc优化
    jdbc入门
    web开发mysql基础
    自定义标签
    jsp基础
    会话管理入门
    19. Remove Nth Node From End of List C++删除链表的倒数第N个节点
  • 原文地址:https://www.cnblogs.com/lisicn/p/15439254.html
Copyright © 2020-2023  润新知