为日志记录添加上下文
项目描述
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 并向维护者提问
David STEINBERGER @dsteinberger
Étienne BERSAC @bersace
Lev Orekhov @lorehov
Malte Baden Hansen @Moulde
Vincent RIALLAND @vrialland
Hugo SMETT @hsmett
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源代码分发
pylogctx-1.12.tar.gz (7.6 kB 查看哈希)
构建分发
pylogctx-1.12-py2.py3-none-any.whl (9.6 kB 查看哈希)