帮助您过度沟通的日志工具
logquacious的Python项目详细描述
对数
logquacious是一组简单的日志工具,可以帮助您进行过度通信。 (如果不是听起来那么糟糕,logorrhea应该是个好名字。)
好的应用程序日志记录很容易被忽略,除非您必须调试错误 在生产中。logquacious的目标是使日志记录尽可能简单。你可以 在官方网站ReadTheDocs documentation上查找更多信息。
快速启动
要开始,请首先确保已安装LogQuacious:
$ pip install logquacious
您还需要为应用程序设置日志记录。为了这个 例如,我们将使用非常简单的配置:
importlogginglogging.basicConfig(format='%(levelname)s: %(message)s',level=logging.DEBUG)
请注意,此简单配置仅用于演示目的。 有关 用于实际日志记录配置的选项。
logquacious的主接口是LogManager,它可以用于 正常记录:
importlogquaciouslog=logquacious.LogManager(__name__)
log.debug('Nothing to see here.')
由于前面定义了简化的日志记录格式,因此将输出:
DEBUG: Nothing to see here.
这不是一个很有趣的例子。除了基本的日志记录, LogManager有一个用作上下文管理器的context属性:
>>>withlog.context.debug('greetings'):...print('Hello!')DEBUG:EntergreetingsHello!DEBUG:Exitgreetings
同样的属性也可以用作装饰符:
@log.context.infodefdivide(numerator,denominator):ifdenominator==0:log.warning('Attempted division by zero. Returning None')returnNonereturnnumerator/denominator>>>divide(1,0)INFO:Call`divide()`WARNING:Attempteddivisionbyzero.ReturningNoneINFO:Returnfrom`divide`
更好的是,您还可以记录输入参数:
@log.context.info(show_args=True,show_kwargs=True)defgreet(name,char='-'):msg='Hello, {name}'.format(name=name)print(msg)print(char*len(msg))>>>greet('Tony',char='~')INFO:Call`greet('Tony', char='~')`Hello,Tony~~~~~~~~~~~INFO:Returnfrom`greet`
还有一个特殊的上下文管理器,用于抑制错误和日志记录:
withlog.and_suppress(ValueError,msg="It's ok, mistakes happen"):raiseValueError('Test error')
[ERROR] It's ok, mistakes happen
Traceback (most recent call last):
File "/Users/tyu/code/logquacious/logquacious/log_manager.py", line 103, in and_suppress
yield
File "scripts/example.py", line 26, in <module>
raise ValueError('Test error')
ValueError: Test error
注意上面的回溯是记录的,而不是流到stderr。
配置
LogManager.context使用的消息模板可以配置为 通过将context_templates参数传递给LogManager:
log=logquacious.LogManager(__name__,context_templates={'context.start':'=============== Enter {label} ===============','context.finish':'=============== Exit {label} ===============',})withlog.context.debug('greetings'):print('Hello!')
[DEBUG] =============== Enter greetings ===============
Hello!
[DEBUG] =============== Exit greetings ===============
context_templates键的一般格式是:
[CONTEXT_TYPE.]('start'|'finish')[.LOG_LEVEL_NAME]
其中方括号表示可选字段。
CONTEXT_TYPE可以是以下任何一种:
- function:作为装饰器调用时使用的模板。
- context:作为上下文管理器调用时使用的模板。
LOG_LEVEL_NAME可以是以下任何日志级别:
- DEBUG
- INFO
- WARNING
- ERROR
- CRITICAL
例如,考虑function.start.DEBUG的级联图,其中 看起来像:
function.start.DEBUG / \ start.DEBUG function.start \ / start
使用广度优先搜索执行级联。如果 function.start.DEBUG未定义,请检查start.DEBUG然后检查 function.start在检查start之前。
默认配置为:
DEFAULT_TEMPLATES={'start':'Enter {label}','finish':'Exit {label}','function.start':'Call `{label}({arguments})`','function.finish':'Return from `{label}`',}
注意,自定义配置会更新这些默认值。例如,如果你 如果您想跳过在所有上下文管理器上退出的日志记录,则希望 装饰者,您将把和'function.finish'都设置为None 或者空字符串。
如上所示,可以将两个模板变量传递给模板 字符串:label和arguments。当作为上下文管理器调用时,label 是上下文管理器的第一个参数,arguments始终为空。 当作为decorator调用时,label是函数的__name__和 argumentsa表示输入参数的字符串,如果show_argsor show_kwargs参数是True。
学分
这个包是用Cookiecutter和 audreyr/cookiecutter-pypackage项目模板。
历史记录
0.5.0(2019-05-05)
- 来自python 3.8和configure的backportstacklevel关键字参数 stacklevel,以便日志工具报告上下文(例如文件名 和行号),其中调用logquacious实用程序。
0.4.0(2018-10-05)
- 修复配置覆盖行为以扩展而不是替换默认模板
0.3.0(2018-10-05)
- 为log.and_suppress和log.and_reraise上下文添加装饰器支持 经理
- 禁止记录空/空日志消息模板
0.2.0(2018-10-03)
更改了默认模板。在0.1.0中,模板是:
DEFAULT_TEMPLATES={'start':'Start {label}','finish':'Finish {label}',}
这些默认值已更改为:
DEFAULT_TEMPLATES={'start':'Enter {label}','finish':'Exit {label}','function.start':'Call `{label}({arguments})`','function.finish':'Return from `{label}`',}
0.1.0(2018-10-03)
- pypi上的第一个版本。