如何将记录器django_structlog.midlewares.request重定向到另一个文件



我在Django中使用structlog,但我发现我的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,
)

谢谢

我找到了一个解决最初发布的问题的方法。

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

最新更新