向日志记录添加上下文
pylogctx的Python项目详细描述
python日志上下文
pylogctx是一个从上下文丰富每个日志记录的库。 典型的用法是在所有日志中添加一些request_id,以便 故障排除更舒适。所有代码都共享此上下文 使用logging,透明。
import logging.config from pylogctx import context as log_context logging.config.dictConfig({ 'formatters': {'json': { '()': 'pythonjsonlogger.jsonlogger.JsonFormatter', 'format': "%(asctime)s %(name)s %(levelname)s %(message)s", }}, 'filters': {'context': { '()': 'pylogctx.AddContextFilter', }}, 'handlers': {'console': { 'class': 'logging.StreamHandler', 'filters': ['context'], 'formatter': 'json', }}, 'root': { 'level': 'INFO', 'handlers': ['console'], }, }) logger = logging.getLogger(__name__) def mycode(request, ticket_id): # push new fields log_context.update(requestId=uuid.uuid4()) myticket = get_object_or_404(models.Ticket, pk=ticket_id) # push objects, they will be adapted to log fields log_context.update(myticket): # Log as usual logger.info("Working on %r", myticket) for comment in myticket.comments: # A context manager allow to push and pop fields with log_context(comment): logger.info("Working on comment %r", comment) # code, use external libs, etc. # Don't forget to clear the context for the next request. Use the # middleware to have it clean. log_context.clear()
输出如下:
{'loggerName': 'package.module', 'levelname': 'INFO', 'message': 'Working on <Ticket #1>', 'ticketId': 1, 'requestId': 'c5521138-031a-4da6-b9db-c9eda3e090f1'} {'loggerName': 'package.module', 'levelname': 'INFO', 'message': 'Working on comment <Comment #4>', 'ticketId': 1, 'ticketCommentId': 4, 'requestId': 'c5521138-031a-4da6-b9db-c9eda3e090f1'} {'loggerName': 'package.module', 'levelname': 'INFO', 'message': 'Working on comment <Comment #5>', 'ticketId': 1, 'ticketCommentId': 5, 'requestId': 'c5521138-031a-4da6-b9db-c9eda3e090f1'} {'loggerName': 'package.module', 'levelname': 'INFO', 'message': 'Working on comment <Comment #78>', 'ticketId': 1, 'ticketCommentId': 78, 'requestId': 'c5521138-031a-4da6-b9db-c9eda3e090f1'} {'loggerName': 'package.module', 'levelname': 'INFO', 'message': 'Working on comment <Comment #9>', 'ticketId': 1, 'ticketCommentId': 9, 'requestId': 'c5521138-031a-4da6-b9db-c9eda3e090f1'} {'loggerName': 'package.module', 'levelname': 'INFO', 'message': 'Working on <Ticket #890>', 'ticketId': 890, 'requestId': 'c64aaae7-049b-4a02-929b-2d0ac9141f5c'} {'loggerName': 'package.module', 'levelname': 'INFO', 'message': 'Working on comment <Comment #80>', 'ticketId': 890, 'ticketCommentId': 80, 'requestId': 'c64aaae7-049b-4a02-929b-2d0ac9141f5c'}
用您最喜欢的python软件包安装程序安装它:
$ pip install pylogctx
这里有几个Celery和Django项目的助手。详见USAGE!
贡献者
加入我们,让原木摇摆更好!阅读HACKING并询问维护人员:
- 大卫·斯坦伯格@dsteinberger
- 埃蒂安·贝尔萨克@bersace
- 列夫·奥雷科夫@lorehov
- 麦芽巴登汉森@Moulde
- 文森特·里亚兰@vrialland
- 雨果·斯密特@hsmett