Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 日志未在Django中从自定义记录器发出_Python_Django_Logging - Fatal编程技术网

Python 日志未在Django中从自定义记录器发出

Python 日志未在Django中从自定义记录器发出,python,django,logging,Python,Django,Logging,我已经创建了一个自定义处理程序和一个模型来将日志保存到数据库中 以下模型日志条目在models.py的applogger中定义: from django.db import models class LogEntry(models.Model): time = models.DateTimeField(auto_now_add=True) level = models.CharField(max_length=10) message = models.TextField

我已经创建了一个自定义处理程序和一个模型来将日志保存到数据库中

以下模型日志条目在
models.py的
applogger
中定义:

from django.db import models

class LogEntry(models.Model):
    time = models.DateTimeField(auto_now_add=True)
    level = models.CharField(max_length=10)
    message = models.TextField()
from logging import Handler

import json, datetime, random


class DBHandler(Handler):
    model_name = None
    expiry = None

    def __init__(self, model="", expiry=0):
        super(DBHandler,self).__init__()
        self.model_name = model
        self.expiry = int(expiry)

    def emit(self, record):
        # putting a pdb trace
        # this is not triggered
        import pdb; pdb.set_trace()
        try:
            # instantiate the model
            try:
                model = self.get_model(self.model_name)
            except:
                from .models import LogEntry as model

            log_entry = model(level=record.levelname, message=self.format(record))

            except:
                pass

            log_entry.save()

        except:
            pass

    def get_model(self, name):
        names = name.split('.')
        mod = __import__('.'.join(names[:-1]), fromlist=names[-1:])
        return getattr(mod, names[-1])
我有一个名为
applogger
的应用程序,其中有一个日志处理程序
handlers.py

from django.db import models

class LogEntry(models.Model):
    time = models.DateTimeField(auto_now_add=True)
    level = models.CharField(max_length=10)
    message = models.TextField()
from logging import Handler

import json, datetime, random


class DBHandler(Handler):
    model_name = None
    expiry = None

    def __init__(self, model="", expiry=0):
        super(DBHandler,self).__init__()
        self.model_name = model
        self.expiry = int(expiry)

    def emit(self, record):
        # putting a pdb trace
        # this is not triggered
        import pdb; pdb.set_trace()
        try:
            # instantiate the model
            try:
                model = self.get_model(self.model_name)
            except:
                from .models import LogEntry as model

            log_entry = model(level=record.levelname, message=self.format(record))

            except:
                pass

            log_entry.save()

        except:
            pass

    def get_model(self, name):
        names = name.split('.')
        mod = __import__('.'.join(names[:-1]), fromlist=names[-1:])
        return getattr(mod, names[-1])
我已在我的
settings.py中设置了以下
LOGGING
配置

LOGGING = {
    "version": 1,
    "disable_existing_loggers": False,
    "formatters": {
        "verbose": {
            "format": "{levelname} {asctime} {module} {process:d} {thread:d} {message}",
            "style": "{",
        },
    },
    "handlers": {
        "log_db": {
            "level": "INFO",
            "class": "applogger.handlers.DBHandler",
            "model": "applogger.models.LogEntry",
            "expiry": 86400,
            "formatter": "verbose",
        },
    },
    "logger": {
        "api": {                  # I have tried "django" and "api.views" both don't work here
            "handlers": ["log_db"], 
            "level": "INFO",
        }
    },
}
api
应用程序中,我有一个
views.py
,其中我初始化了记录器,如下所示:

import logging

# instance of the logger
logger = logging.getLogger(__name__)
logger.info('View Initialized')


class Tasks(APIView):
    permission_classes = (IsAuthenticated,)

    def post(self, request, *args, **kwargs):
            ...
            ...
            # business logic
            if file_object.created_by == request.user:
                file_object.save()
                logger.info(
                    f"REQUEST USER: {request.user}"
                )
pdb.set_trace()
不会在自定义DBhandler中触发,并且不会在系统中生成任何条目:


如果我使用文件处理程序日志记录,则会生成日志。

我找到了它。Django框架要求字典具有
'logger'
,我用
'logger'
对其进行了配置。