Как перенаправить регистратор django_structlog.middlewares.request в другой файл? - PullRequest
0 голосов
/ 23 апреля 2020

Я использую structlog с Django, но я обнаружил, что мой flat_line.log файл трудно читать, потому что каждый раз, когда в разделе администратора выполняется действие, появляется несколько новых записей, подобных этим:

timestamp='2020-04-23T15:17:49.196600Z' level='info' event='request_started' logger='django_structlog.middlewares.request' request_id='bf82598e-5a34-4bd0-a698-7556bf4733a4' user_id=1 ip='127.0.0.1' request=<WSGIRequest: GET '/admin/myapp/market/'> user_agent='Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'
timestamp='2020-04-23T15:17:49.325273Z' level='info' event='request_finished' logger='django_structlog.middlewares.request' request_id='bf82598e-5a34-4bd0-a698-7556bf4733a4' user_id=1 ip='127.0.0.1' code=200 request=<WSGIRequest: GET '/admin/myapp/market/'>
timestamp='2020-04-23T15:17:49.465507Z' level='info' event='request_started' logger='django_structlog.middlewares.request' request_id='9e7558a8-2d8f-4145-8569-9c6a74b0090b' user_id=1 ip='127.0.0.1' request=<WSGIRequest: GET '/admin/jsi18n/'> user_agent='Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'
timestamp='2020-04-23T15:17:49.468317Z' level='info' event='request_finished' logger='django_structlog.middlewares.request' request_id='9e7558a8-2d8f-4145-8569-9c6a74b0090b' user_id=1 ip='127.0.0.1' code=200 request=<WSGIRequest: GET '/admin/jsi18n/'>

Как я могу перенаправить все записи из регистратора django_structlog.middlewares.request в другой файл, чтобы они не заполняли файлы журнала тонной нежелательной информации?

Вот так выглядит моя конфигурация:

LOGGING = {
    "version": 1,
    "disable_existing_loggers": True,
    "formatters": {
        "json_formatter": {
            "()": structlog.stdlib.ProcessorFormatter,
            "processor": structlog.processors.JSONRenderer(),
        },
        "plain_console": {
            "()": structlog.stdlib.ProcessorFormatter,
            "processor": structlog.dev.ConsoleRenderer(),
        },
        "key_value": {
            "()": structlog.stdlib.ProcessorFormatter,
            "processor": structlog.processors.KeyValueRenderer(key_order=['timestamp', 'level', 'event', 'logger']),
        },
    },
    "handlers": {
        "console": {
            "class": "logging.StreamHandler",
            "formatter": "plain_console",
        },
        "json_file": {
            "class": "logging.handlers.WatchedFileHandler",
            "filename": "json.log",
            "formatter": "json_formatter",
        },
        "flat_line_file": {
            "class": "logging.handlers.WatchedFileHandler",
            "filename": "flat_line.log",
            "formatter": "key_value",
        },
    },
    "loggers": {
        '': {
            "handlers": ["console", "flat_line_file", "json_file"],
            "level": "INFO",
        }
    }
}

structlog.configure(
    processors=[
        structlog.stdlib.filter_by_level,
        structlog.processors.TimeStamper(fmt="iso"),
        structlog.stdlib.add_logger_name,
        structlog.stdlib.add_log_level,
        structlog.stdlib.PositionalArgumentsFormatter(),
        structlog.processors.StackInfoRenderer(),
        structlog.processors.format_exc_info,
        structlog.processors.UnicodeDecoder(),
        structlog.stdlib.ProcessorFormatter.wrap_for_formatter,
    ],
    context_class=structlog.threadlocal.wrap_dict(dict),
    logger_factory=structlog.stdlib.LoggerFactory(),
    wrapper_class=structlog.stdlib.BoundLogger,
    cache_logger_on_first_use=True,
)

Спасибо

1 Ответ

0 голосов
/ 23 апреля 2020

Я нашел обходной путь к изначально опубликованному вопросу.

"loggers": {
    '': {
        "handlers": ["console", "flat_line_file", "json_file"],
        "level": "ERROR",
    },
    'myapp': {
        "handlers": ["console", "flat_line_file", "json_file"],
        "level": "INFO",
    }
...