Flask Web アプリケーションがあり、アプリケーションの起動時にdictConfigを介して Python ログの構成が行われます。特定のログをデータベースに書き込むためのハンドラーが、ロガー「test.module」にアタッチされています。そのロガーに作成されたログはlogging.basicConfig(level=logging.DEBUG)
、アプリケーションの起動時にも呼び出された場合にのみ、データベースに書き込まれます。それ以外の場合、ログはデータベースに書き込まれません。basicConfig が streamHandler をルートロガーにアタッチするだけであることは知っています。ルートロガーによって何も行われたくないので、これは無関係であるべきだと思います。これが basicConfig なしでは機能しないのはなぜですか?
ロガーを開始する方法と構成を以下に追加しました。
class DbHandler(logging.Handler):
def __init__(self, level=logging.NOTSET):
logging.Handler.__init__(self, level)
def emit(self, record):
record.message = self.format(record)
log = DbModel()
log.message = record.message
log.save()
LOGGING = {
'version': 1,
'handlers': {
'db_log': {
'level': 'DEBUG',
'class': 'test.handlers.DbHandler',
},
},
'loggers': {
'test.important_module': {
'handlers': [
'db_log'
],
},
}
# logging.basicConfig(level=logging.DEBUG) # Doesnt work without this
logging.config.dictConfig(LOGGING)
logger = logging.getLogger('test.important_module')
logger.info('Making a test')