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