Skip to main content

PyLogrus 是 Python 的结构化记录器

项目描述

PyLogrus 是 Python 的结构化记录器,其灵感来自于 Logrus Golang 库https://github.com/sirupsen/logrus。PyLogrus 扩展了内置的日志记录模块,能够在日志中制作彩色记录和 JSON 格式的记录。

特征

使用此软件包,您将能够:

  • 在控制台中着色输出(文本格式)

  • 关闭着色(文本格式)

  • 在日志记录中添加额外字段

  • 在日志记录中添加永久额外字段

  • 为消息添加永久前缀

  • 创建一个新的上下文实例

  • 以 JSON 格式保存日志记录

  • 覆盖日志级别的名称

  • 覆盖基本元素的颜色(文本格式)

  • 覆盖键名(JSON 格式)

  • 在记录中只定义需要的字段(JSON 格式)

  • 以 Zulu 格式创建记录的时间

<图> 有色 </图>

初始化

import logging
from pylogrus import PyLogrus

logging.setLoggerClass(PyLogrus)

格式化程序

文本格式化程序

TextFormatter 类允许通过设置 colorize参数对控制台输出进行着色。可以关闭着色。日志记录时间可以Zulu格式设置。只需将datefmt参数设置为“Z”。

import logging
from pylogrus import PyLogrus, TextFormatter

logging.setLoggerClass(PyLogrus)

logger = logging.getLogger(__name__)  # type: PyLogrus
logger.setLevel(logging.DEBUG)

formatter = TextFormatter(datefmt='Z', colorize=True)

ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
ch.setFormatter(formatter)
logger.addHandler(ch)

覆盖级别的名称

您只能定义必要的更改:

formatter = TextFormatter(datefmt='Z', colorize=True)
formatter.override_level_names({'CRITICAL': 'CRIT', 'ERROR': 'ERRO', 'WARNING': 'WARN', 'DEBUG': 'DEBU'})

或者例如:

formatter.override_level_names({'CRITICAL': 'FATAL'})

覆盖颜色

TextFormatter 有几个可以着色的基本元素。您可以通过颜色属性获取它们:

print(formatter.color)
...
{
    'asctime':  '\x1b[2;37m',  # time of log record
    'prefix':   '\x1b[0;36m',  # message prefix
    'field':    '\x1b[0;32m',  # key of extra field
    'value':    '\x1b[0m',     # value of extra field
    'debug':    '\x1b[0;34m',
    'info':     '\x1b[0;32m',
    'warning':  '\x1b[0;33m',
    'error':    '\x1b[0;31m',
    'critical': '\x1b[2;31m'
}

可以使用 CL_* 常量更改元素的颜色。您只能为您需要的那些元素定义新颜色。

from pylogrus import PyLogrus, TextFormatter, CL_BLDYLW
...
formatter = TextFormatter(colorize=True)
formatter.override_colors({'prefix': CL_BLDYLW})

JsonFormatter

JsonFormatter 类允许以 JSON 格式保存日志记录。在类初始化期间,您可以:

  • 设置Zulu格式的日志记录时间。只需将datefmt参数设置为“Z”。

  • 通过enabled_fields参数定义将出现在日志记录中的启用字段列表。启用的字段由原始字段名称或包含原始名称和新所需名称的元组表示。新名称会覆盖输出中的原始名称。

  • 要在控制台中漂亮地打印 JSON 日志记录,请设置indentsort_keys参数(可选)。

import logging
from pylogrus import PyLogrus, JsonFormatter

logging.setLoggerClass(PyLogrus)

logger = logging.getLogger(__name__)  # type: PyLogrus
logger.setLevel(logging.DEBUG)

enabled_fields = [
    ('name', 'logger_name'),
    ('asctime', 'service_timestamp'),
    ('levelname', 'level'),
    ('threadName', 'thread_name'),
    'message',
    ('exception', 'exception_class'),
    ('stacktrace', 'stack_trace'),
    'module',
    ('funcName', 'function')
]

formatter = JsonFormatter(datefmt='Z', enabled_fields=enabled_fields, indent=2, sort_keys=True)

ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
ch.setFormatter(formatter)
logger.addHandler(ch)

覆盖级别的名称

可以以与使用 TextFormatter 的情况相同的方式覆盖级别的名称。

formatter = JsonFormatter()
formatter.override_level_names({'WARNING': 'WARN'})

用法

请参阅示例目录中的使用示例。

像往常一样记录消息:

import logging
from pylogrus import PyLogrus, TextFormatter

def get_logger():
    logging.setLoggerClass(PyLogrus)
    ...
    formatter = TextFormatter()
    ...
    return logger

log = get_logger()
log.debug("Using base logger")

带有额外字段的日志消息:

log.withFields({'user': 'John Doe'}).debug("Message with an extra field")

在记录器中添加永久字段并获取上下文实例:

log_ctx = log.withFields({'context': 1})
log_ctx.info("Add permanent field into current logger")

为当前记录器实例的消息添加永久前缀:

log_ctx = log_ctx.withPrefix("[API]")
log_ctx.info("Add prefix as a permanent part of a message")

带有额外字段的日志消息:

log_ctx.withFields({
    'user': 'Admin',
    'transaction_id': str(uuid.uuid4())
}).warning("Message with prefix and extra fields")

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

pylogrus-0.4.0.tar.gz (10.6 kB 查看哈希

已上传 source

内置分布

pylogrus-0.4.0-py2.py3-none-any.whl (11.6 kB 查看哈希

已上传 py2 py3