在使用数据工厂时,只能看到配置的好的数据卡片;
但并不知道背后执行的逻辑是怎么样的,有时候执行的结果不符合预期时,
希望可以把当前数据卡片执行的日志返回,方便直接在前端就能排查问题。

在某个 app 的 models 下面增加
# models.py
from django.db import models
class LogRecord(models.Model):
    class Meta:
        db_table = "t_log_record"
    request_id = models.CharField(max_length=100, null=True, db_index=True)
    level = models.CharField(max_length=20)
    message = models.TextField(db_index=True)    
 在settings.py所在的目录,新建一个模块,比如log.py
# log.py
import logging
from xxx.models import LogRecord  # 引入上面定义的LogRecord模型
class DatabaseLogHandler(logging.Handler):
    def emit(self, record: logging.LogRecord) -> None:
        LogRecord.objects.create(
            request_id=record.request_id,
            level=record.levelname,
            message=self.format(record),
        )
 注意,只是说明如何使用日志自定义 handle,不是完整的日志配置。
也缺少了上面的request_id字段,这个需要在 formatters 中配置。
使用request_id做链路追踪,参考:
https://blog.huacai.one/post/39
# settings.py
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'db': {
            'level': 'DEBUG',
            'class': 'your_app_name.handlers.DatabaseLogHandler',  # 指向你的自定义处理器
        },
    },
    'loggers': {
        'django': {
            'handlers': ['db'],
            'level': 'DEBUG',
            'propagate': True,
        },
    },
}
 
通过中间件返回,具体参考链接
https://github.com/lihuacai168/django-ninja-demo/blob/92b4f4250e9bb9d42628355698a3e7912cffb04d/core/middleware.py#L27C19-L27C19
