logging.config.fileConfig не выдает журналы - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь настроить ведение журнала для приложения фляги, и для этого мне нужно использовать logging.config.dictConfig(), потому что мне нужно указать фильтр.До того, как мне понадобился фильтр, я использовал logging.config.fileConfig(), и все работало нормально.Но теперь я перешел на dict и config, и ни один из моих журналов нигде не отображается.Это похоже на то, что словарная конфигурация просто полностью игнорируется.Я не знаю, что я делаю неправильно, так как я не получаю никаких ошибок.Вот как выглядела моя первоначальная конфигурация логирования:

[loggers]
keys=root,rasa_core.agent,rasa_core.tracker_store,rasa_core.processor,test,run

[handlers]
keys=rootHandler,agentHandler,trackerHandler,convHandler,testHandler

[formatters]
keys=basic

[logger_root]
level=NOTSET
handlers=rootHandler

[logger_rasa_core.agent]
level=NOTSET
handlers=agentHandler
qualname=rasa_core.agent

[logger_rasa_core.tracker_store]
level=NOTSET
handlers=trackerHandler
qualname=rasa_core.tracker_store

[logger_rasa_core.processor]
level=NOTSET
handlers=convHandler
qualname=rasa_core.processor

[logger_test]
level=NOTSET
handlers=testHandler
qualname=my_app.trainer_app.routes

[logger_run]
level=NOTSET
handlers=rootHandler
qualname=__main__

[handler_rootHandler]
class=StreamHandler
level=INFO
formatter=basic
args=(sys.stdout,)

[handler_agentHandler]
class=FileHandler
level=NOTSET
formatter=basic
args=('my_app/logs/agent.log', 'a')

[handler_trackerHandler]
class=FileHandler
level=NOTSET
formatter=basic
args=('my_app/logs/tracker.log', 'a')

[handler_convHandler]
class=FileHandler
level=NOTSET
formatter=basic
args=('my_app/logs/conv.log', 'a')

[handler_testHandler]
class=StreamHandler
level=NOTSET
formatter=basic
args=(sys.stdout,)

[formatter_basic]
format=%(asctime)s - %(levelname)s - %(funcName)s - %(pathname)s - %(threadName)s - %(message)s

, а вот новая конфигурация словаря:

CONFIG = {
    'version': 1,
    'formatters': {
        'standard': {
            'format': '%(asctime)s - %(levelname)s - %(funcName)s - %(pathname)s - Session:%(session_id)s - %(message)s'
        }
    },
    'handlers': {
        'rootHandler': {
            'class': 'logging.StreamHandler',
            'level': 'INFO',
            'formatter': 'standard',
            'stream': 'ext://sys.stdout',
            'filters': ['sessionFilter']
        },
        'agentHandler' :{
            'class': 'logging.handlers.RotatingFileHandler',
            'level': 'NOTSET',
            'filename': 'my_app/logs/agent.log',
            'maxBytes': 1024,
            'backupCount': 3,
            'formatter': 'standard',
            'filters': ['sessionFilter']
        },
        'trackerHandler': {
            'class': 'logging.handlers.RotatingFileHandler',
            'level': 'NOTSET',
            'filename': 'my_app/logs/tracker.log',
            'maxBytes': 1024,
            'backupCount': 3,
            'formatter': 'standard',
            'filters': ['sessionFilter']
        },
        'convHandler': {
            'class': 'logging.handlers.RotatingFileHandler',
            'level': 'NOTSET',
            'filename': 'my_app/logs/conv.log',
            'maxBytes': 1024,
            'backupCount': 3,
            'formatter': 'standard',
            'filters': ['sessionFilter'],
        },
        'testHandler': {
            'class': 'logging.StreamHandler',
            'level': 'NOTSET',
            'formatter': 'standard',
            'stream': 'ext://sys.stdout',
            'filters': ['sessionFilter']
        }
    },
    'loggers': {
        'root': {
            'level': 'NOTSET',
            'handlers': ['rootHandler', 'testHandler']
        },
        'rasa_core.agent': {
            'level': 'NOTSET',
            'handlers': ['agentHandler'],
        },
        'rasa_core.tracker_store': {
            'level': 'NOTSET',
            'handlers': ['trackerHandler'],
        },
        'rasa_core.processor': {
            'level': 'NOTSET',
            'handlers': ['convHandler', 'testHandler'],
        },
        'my_app.trainer_app.routes': {
            'level': 'NOTSET',
            'handlers': ['testHandler'],
        }
    },
    'filters': {
        'sessionFilter': {
            '()': 'my_app.logging.filters.SessionFilter'
        }
    },
    'disable_existing_loggers': False
}

Это код, в который я загружаю конфигурацию:

import sys
import logging

from my_app.logging.dict_config import CONFIG
from my_app.trainer_app import routes
from my_app.trainer_app.app import app, app_config
from my_app.trainer_app.cherry import run_cp


print(CONFIG)
logging.config.dictConfig(CONFIG)
logger = logging.getLogger(__name__)
# logging.config.fileConfig(fname='my_app/config/logging.conf')

Я прокомментировал исходный logging.config.fileConfig, чтобы показать, где он был первоначально.

Я действительно не понимаю, почему оригинальная конфигурация регистрации работала бы хорошо, но эта новая просто ничего не делает.

1 Ответ

0 голосов
/ 03 января 2019

Я понял это.По какой-то причине корневой логгер обозначается '' вместо имени 'root', как в конфигурации файла.Использование этого файла устранило проблему:

CONFIG = {
    'version': 1,
    'formatters': {
        'standard': {
            'format': '%(asctime)s - %(levelname)s - Session: %(session_id)s - %(message)s'
        }
    },
    'handlers': {
        'rootHandler': {
            'class': 'logging.StreamHandler',
            'level': 'INFO',
            'formatter': 'standard',
            'stream': 'ext://sys.stdout',
            'filters': ['sessionFilter']
        },
        'agentHandler' :{
            'class': 'logging.FileHandler',
            'level': 'NOTSET',
            'filename': 'my_app/logs/agent.log',
            'formatter': 'standard',
            'filters': ['sessionFilter']
        },
        'trackerHandler': {
            'class': 'logging.FileHandler',
            'level': 'NOTSET',
            'filename': 'my_app/logs/tracker.log',
            'formatter': 'standard',
            'filters': ['sessionFilter']
        },
        'convHandler': {
            'class': 'logging.FileHandler',
            'level': 'NOTSET',
            'filename': 'my_app/logs/conv.log',
            'formatter': 'standard',
            'filters': ['sessionFilter'],
        },
        'testHandler': {
            'class': 'logging.StreamHandler',
            'level': 'NOTSET',
            'formatter': 'standard',
            'stream': 'ext://sys.stdout',
            'filters': ['sessionFilter']
        },
        'testHandlerNoFilter': {
            'class': 'logging.StreamHandler',
            'level': 'NOTSET',
            'formatter': 'standard',
            'stream': 'ext://sys.stdout'
        }
    },
    'loggers': {
        '': {
            'level': 'NOTSET',
            'handlers': ['rootHandler']
        },
        'rasa_core.agent': {
            'level': 'NOTSET',
            'handlers': ['agentHandler'],
        },
        'rasa_core.tracker_store': {
            'level': 'NOTSET',
            'handlers': ['trackerHandler'],
        },
        'rasa_core.processor': {
            'level': 'NOTSET',
            'handlers': ['convHandler', 'testHandler'],
        },
        'my_app.trainer_app.routes': {
            'level': 'NOTSET',
            'handlers': ['testHandler'],
        }
    },
    'filters': {
        'sessionFilter': {
            '()': 'my_app.logging.filters.SessionFilter'
        }
    },
    'disable_existing_loggers': False
}

Единственное важное отличие состоит в том, что я заменил 'root' на ''.Любые другие различия не имеют отношения к этому вопросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...