Wenn Sie versuchen, Informationen auszugeben, die nicht im [LogRecord-Attribut] enthalten sind (https://docs.python.org/ja/3/library/logging.html#logrecord-attributes), z. B. Benutzerinformationen an das Django-Protokoll anfordern,
logger.info(message, extra={'username' : request.user.username})
Sie können so etwas finden, aber es ist ein bisschen anders. Es gab eine Lösung, als ich dachte, dass es Entwicklungsmitglieder gibt, die sich nicht an die Regeln halten, und dass dies nur für die von mir geschriebenen Protokolle funktioniert.
Middleware
python
import logging
import threading
local = threading.local()
class CustomAttrMiddleware:
"""
Middleware, um benutzerdefinierte Elemente zur Protokollierung auszugeben
"""
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
"""
Rufen Sie den Benutzernamen der Anfrage ab, wenn Sie vom Client eine Anfrage stellen
threading.local()Vorübergehend speichern bis
"""
if request.user:
setattr(local, 'user', request.user.username)
else:
setattr(local, 'user', None)
response = self.get_response(request)
#Klar, wenn Sie antworten
setattr(local, 'user', None)
return response
filter
python
class CustomAttrFilter(logging.Filter):
"""
Filter für die Ausgabe von benutzerdefinierten Elementen zum Protokollieren
"""
def filter(self, record):
record.user = getattr(local, 'user', None)
return True
settings.py
python
MIDDLEWARE = [
...
'middleware.custom_logging.CustomAttrMiddleware',
]
LOGGING = {
...
'formatters': {
'verbose': {
'format': '%(levelname)s %(asctime)s %(module)s '
'%(process)d %(thread)d user=%(user)s %(message)s'
},
},
'filters' : {
'custom': {
'()': 'middleware.custom_logging.CustomAttrFilter'
},
},
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'verbose',
'filters': ['custom']
},
},
...
}
python
class LoggingExceptListView(generics.ListAPIView):
"""
ListView, um die Ausnahmeausgabe im Protokoll anzuzeigen
"""
def list(self, request, *args, **kwargs):
"""
Erhöhen Sie einfach eine Ausnahme
"""
raise Exception('Zum Überprüfen von Protokollen')
python
ERROR 2020-05-06 17:12:02,703 log 13516 10376 user=CustomAttrUser Internal Server Error: /sample_api/logging-exp/
Traceback (most recent call last):
File "C:\ProgramData ...
... raise Exception('Zum Überprüfen von Protokollen')
https://github.com/ping2shi2/DRF-sample