在使用数据工厂时,只能看到配置的好的数据卡片;
但并不知道背后执行的逻辑是怎么样的,有时候执行的结果不符合预期时,
希望可以把当前数据卡片执行的日志返回,方便直接在前端就能排查问题。
在某个app的models下面增加
python# 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
python# 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
本文作者:花菜
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!