如何在 python 中使用 bunyan 将日志记录适配器用于 sysout 日志
how to use logging adapter for sysout logs using bunyan in python
我正在尝试将请求编号附加到每个请求的日志中:
借助 python 日志记录模块,我能够使用以下命令将 ID 附加到每个日志:
id = uuid();
logger = logging.loggerAdapter(logging.getlogger('root'), {"RequestNumber" : id});
logger.info('this is a log message')
使用 Bunyan 日志记录
import bunyan
import logging
import sys
logger = logging.getLogger()
#logger = logging.loggerAdapter(logging.getlogger('root'), {"RequestNumber" : id});
config = {
'formatters': {
'bunyan': {
'()' : 'bunyan.BunyanFormatter'
}
},
'handlers': {
'debug': {
'class': 'logging.StreamHandler',
'formatter': 'bunyan',
'stream': 'ext://sys.stdout'
},
},
'root': {
'level': 'DEBUG',
'handlers': ['debug']
},
'version': 1
}
import logging.config
logging.config.dictConfig(config)
logger.debug("This is a log message")
logger.debug("This is a log message")
logger.debug("This is a log message")
但是在 bunyan 文档中,发现附加额外字典的唯一方法如下:
logger.debug("This is a log message with extra context", extra = {'some': 'additional data'})
问题是 RequestNumber 必须附加在每个日志命令中。
有什么方法可以将 loggerAdapter 与 bunyan 一起使用?
如果 extra 的内容大部分或全部保持静态,您可以使用 functools 中的 partial。例如,
>>> from functools import partial
>>> logger.debug = partial(logger.debug, extra={"some_data":"right here"})
>>> logger.debug("test")
{"name": "root", "msg": "test", "some_data": "right here", "time": "2018-12-20T23:50:00Z", "hostname": "DESKTOP-DAQKYZ", "level": 20, "pid": 6840, "v": 0}
>>> logger.debug("danger, danger!")
{"name": "root", "msg": "danger, danger!", "some_data": "right here", "time": "2018-12-20T23:51:41Z", "hostname": "DESKTOP-DAQKYZ", "level": 20, "pid": 6840, "v": 0}
我正在尝试将请求编号附加到每个请求的日志中:
借助 python 日志记录模块,我能够使用以下命令将 ID 附加到每个日志:
id = uuid();
logger = logging.loggerAdapter(logging.getlogger('root'), {"RequestNumber" : id});
logger.info('this is a log message')
使用 Bunyan 日志记录
import bunyan
import logging
import sys
logger = logging.getLogger()
#logger = logging.loggerAdapter(logging.getlogger('root'), {"RequestNumber" : id});
config = {
'formatters': {
'bunyan': {
'()' : 'bunyan.BunyanFormatter'
}
},
'handlers': {
'debug': {
'class': 'logging.StreamHandler',
'formatter': 'bunyan',
'stream': 'ext://sys.stdout'
},
},
'root': {
'level': 'DEBUG',
'handlers': ['debug']
},
'version': 1
}
import logging.config
logging.config.dictConfig(config)
logger.debug("This is a log message")
logger.debug("This is a log message")
logger.debug("This is a log message")
但是在 bunyan 文档中,发现附加额外字典的唯一方法如下:
logger.debug("This is a log message with extra context", extra = {'some': 'additional data'})
问题是 RequestNumber 必须附加在每个日志命令中。
有什么方法可以将 loggerAdapter 与 bunyan 一起使用?
如果 extra 的内容大部分或全部保持静态,您可以使用 functools 中的 partial。例如,
>>> from functools import partial
>>> logger.debug = partial(logger.debug, extra={"some_data":"right here"})
>>> logger.debug("test")
{"name": "root", "msg": "test", "some_data": "right here", "time": "2018-12-20T23:50:00Z", "hostname": "DESKTOP-DAQKYZ", "level": 20, "pid": 6840, "v": 0}
>>> logger.debug("danger, danger!")
{"name": "root", "msg": "danger, danger!", "some_data": "right here", "time": "2018-12-20T23:51:41Z", "hostname": "DESKTOP-DAQKYZ", "level": 20, "pid": 6840, "v": 0}