zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    ExtJS4 Panel中嵌套PDF
    从 JavaScript 数组去重谈性能优化(转)
    js中top、parent、frame
    “N”在Sql Server字段类型中的重要性 (转)
    IE下lineheight的BUG解决 (转)
    ExtJS4 Dialog
    Chrome启动后打开第一个网页很慢的解决方案(转)
    ExtJS4 Grid改变单元格背景颜色
    form表单
    Detect IFrame Load Event 探索Iframe的加载事件
  • 原文地址:https://www.cnblogs.com/lisicn/p/15439254.html
Copyright © 2011-2022 走看看