[英]How can I rename "levelname" to "level" in Python log messages?
我有一个 Python 日志记录配置,如下所示:
LOGGING_CONFIG:
version: 1
formatters:
human:
class: logging.Formatter
format: '[%(asctime)s]:[%(levelname)s]: %(message)s'
json:
class: pythonjsonlogger.jsonlogger.JsonFormatter
format: '%(asctime)s %(levelname)s %(message)s'
handlers:
console:
class: logging.StreamHandler
level: DEBUG
formatter: json # change this to 'human' when you run it locally, json in production
file:
class: logging.FileHandler
filename: logfile.log
level: DEBUG
formatter: json
root: # Logging for 3rd party stuff
level: INFO
handlers:
- console
- file
project_name: # Logging this module
level: DEBUG
handlers:
- console
- file
对于另一个系统,我需要结构化日志记录有一些固定的名称。 一个例子是它不应该是levelname
,而是level
。 如何重命名日志字段?
我有的:
{"asctime": "2018-10-22 14:50:19,923", "levelname": "info", "message": "foobar"}
我想要的是:
{"asctime": "2018-10-22 14:50:19,923", "level": "info", "message": "foobar"}
levelname
不会出现在普通的Python记录器中,而是出现在您使用的自定义格式化程序中。 根据我的理解,您可以使用下面的代码片段来自定义它输出的字典:
class CustomJsonFormatter(jsonlogger.JsonFormatter):
def add_fields(self, log_record, record, message_dict):
super(CustomJsonFormatter, self).add_fields(log_record, record, message_dict)
log_record['level'] = log_record['levelname']
del log_record['levelname']
然后更换pythonjsonlogger.jsonlogger.JsonFormatter
与地址CustomJsonFormatter
。
您应该可以使用以下配置来完成此操作:
...
formatters:
json:
format: "%(asctime)s [%(process)d] [%(levelname)s] %(message)s"
(): pythonjsonlogger.jsonlogger.JsonFormatter
rename_fields:
levelname: level
timestamp: true
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.