move logging to separate thread
This commit is contained in:
parent
16eb629b71
commit
940b3eb943
|
@ -239,8 +239,6 @@ if not DEBUG:
|
||||||
STATIC_URL = '/static/'
|
STATIC_URL = '/static/'
|
||||||
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
|
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
|
||||||
|
|
||||||
LOG_HANDLERS = ['console', 'syslog', 'file']
|
|
||||||
|
|
||||||
with CONFIG.cd('log'):
|
with CONFIG.cd('log'):
|
||||||
LOGGING = {
|
LOGGING = {
|
||||||
'version': 1,
|
'version': 1,
|
||||||
|
@ -283,41 +281,50 @@ with CONFIG.cd('log'):
|
||||||
'formatter': 'verbose',
|
'formatter': 'verbose',
|
||||||
'filename': CONFIG.get('file'),
|
'filename': CONFIG.get('file'),
|
||||||
},
|
},
|
||||||
|
'queue': {
|
||||||
|
'level': CONFIG.get('level').get('console'),
|
||||||
|
'class': 'passbook.lib.log.QueueListenerHandler',
|
||||||
|
'handlers': [
|
||||||
|
'cfg://handlers.console',
|
||||||
|
# 'cfg://handlers.syslog',
|
||||||
|
'cfg://handlers.file',
|
||||||
|
],
|
||||||
|
}
|
||||||
},
|
},
|
||||||
'loggers': {
|
'loggers': {
|
||||||
'passbook': {
|
'passbook': {
|
||||||
'handlers': LOG_HANDLERS,
|
'handlers': ['queue'],
|
||||||
'level': 'DEBUG',
|
'level': 'DEBUG',
|
||||||
'propagate': True,
|
'propagate': True,
|
||||||
},
|
},
|
||||||
'django': {
|
'django': {
|
||||||
'handlers': LOG_HANDLERS,
|
'handlers': ['queue'],
|
||||||
'level': 'INFO',
|
'level': 'DEBUG',
|
||||||
'propagate': True,
|
'propagate': True,
|
||||||
},
|
},
|
||||||
'tasks': {
|
'tasks': {
|
||||||
'handlers': LOG_HANDLERS,
|
'handlers': ['queue'],
|
||||||
'level': 'DEBUG',
|
'level': 'DEBUG',
|
||||||
'propagate': True,
|
'propagate': True,
|
||||||
},
|
},
|
||||||
'cherrypy': {
|
'cherrypy': {
|
||||||
'handlers': LOG_HANDLERS,
|
'handlers': ['queue'],
|
||||||
'level': 'DEBUG',
|
'level': 'DEBUG',
|
||||||
'propagate': True,
|
'propagate': True,
|
||||||
},
|
},
|
||||||
'oauthlib': {
|
'oauthlib': {
|
||||||
'handlers': LOG_HANDLERS,
|
'handlers': ['queue'],
|
||||||
'level': 'DEBUG',
|
'level': 'DEBUG',
|
||||||
'propagate': True,
|
'propagate': True,
|
||||||
},
|
},
|
||||||
'oauth2_provider': {
|
'oauth2_provider': {
|
||||||
'handlers': LOG_HANDLERS,
|
'handlers': ['queue'],
|
||||||
'level': 'DEBUG',
|
'level': 'DEBUG',
|
||||||
'propagate': True,
|
'propagate': True,
|
||||||
},
|
},
|
||||||
'daphne': {
|
'daphne': {
|
||||||
'handlers': LOG_HANDLERS,
|
'handlers': ['queue'],
|
||||||
'level': 'INFO',
|
'level': 'DEBUG',
|
||||||
'propagate': True,
|
'propagate': True,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
from atexit import register
|
||||||
|
from logging.config import ConvertingDict, ConvertingList, valid_ident
|
||||||
|
from logging.handlers import QueueHandler, QueueListener
|
||||||
|
from queue import Queue
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
|
|
||||||
|
|
||||||
|
def _resolve_handlers(l):
|
||||||
|
# import pudb; pu.db
|
||||||
|
if not isinstance(l, ConvertingList):
|
||||||
|
return l
|
||||||
|
|
||||||
|
# Indexing the list performs the evaluation.
|
||||||
|
return [l[i] for i in range(len(l))]
|
||||||
|
|
||||||
|
|
||||||
|
class QueueListenerHandler(QueueHandler):
|
||||||
|
|
||||||
|
def __init__(self, handlers, respect_handler_level=False, auto_run=True, queue=Queue(-1)):
|
||||||
|
super().__init__(queue)
|
||||||
|
handlers = _resolve_handlers(handlers)
|
||||||
|
self._listener = QueueListener(
|
||||||
|
self.queue,
|
||||||
|
*handlers,
|
||||||
|
respect_handler_level=respect_handler_level)
|
||||||
|
if auto_run:
|
||||||
|
self.start()
|
||||||
|
register(self.stop)
|
||||||
|
|
||||||
|
def start(self):
|
||||||
|
self._listener.start()
|
||||||
|
|
||||||
|
def stop(self):
|
||||||
|
self._listener.stop()
|
||||||
|
|
||||||
|
def emit(self, record):
|
||||||
|
return super().emit(record)
|
Reference in New Issue