在Python

时间:2015-07-30 02:24:43

标签: python logging

我使用导入大量库的repo在一个系统上工作。这些使用了Python记录器工具。我只会收到事件logger.error及更高版本的消息。

我搬到了另一个系统并克隆了相同的repos(和库)。现在,我得到logger.info()和更高版本。我做了一些搜索,但我无法找到保存用户记录器中央配置的位置。我不确定从第一个系统到第二个系统有什么变化,但我希望能够拥有第一个系统的功能。

澄清:记录器'过滤器'应用于不仅由软件生成的消息,还应用于它使用的库。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

对于Python的标准logging模块,没有用于记录的系统范围的中央配置,IIRC;你必须以编程方式设置它 - 如果你愿意,你可以从你自己的配置文件,sys.argv中的参数,Consul等中触发它;天空是这里的极限。根据您正在使用的程序及其工作原理,它可能具有用于设置日志记录级别的特定配置文件或方法。如果这只是您自己的代码库,请继续阅读。

要设置日志记录级别,您需要一个记录器;一旦你有了记录器,你只需要打电话给setLevel。您可以为根记录器执行此操作,这可能会影响所有日志记录:

root_logger = logging.getLogger()
root_logger.setLevel(logging.WARNING)  # I'd recommend not removing WARNINGs.

将日志级别应用于根记录器是一个大锤解决方案;一些表现良好的库(以及您自己的代码也可以这样做)创建自己的记录器,例如,

MY_LIBRARYS_LOGGER = logging.getLogger('my_library')

def some_public_function(…):
    MY_LIBRARYS_LOGGER.info('Hi there logs.')

然后,您可以使用

将这些消息静音
logging.getLogger('my_library').setLevel(logging.WARNING)

(或者,如果他们将记录器导出为常量,就像我的例子那样,MY_LIBRARYS_LOGGER.setLevel(…))我发现通过记录器重定向整个子系统非常有用,这样你就可以根据需要提高/降低这些级别在寻找虫子时。

作为执行此操作的库的示例,this answer显示了如何将其应用于requests library

最后一点:记录器构成一个层次结构:foo.barfoo的子记录器。当然,请参阅the logging module's documentation

一个最后意见:如果 是您的代码库,并且您看到太多的日志行,请考虑将其中一些移到{{1 }};我发现debug是一个记录系统健康状况的好地方,例如"这个对其他服务器的请求耗时n秒" (一个真正的衡量标准系统当然是一个更好的选择,如果你有一个,但有时你拥有的是日志);这使得一个简单的grep看看该请求是否很慢,并且如果它太嘈杂(通过剔除信息行),仍然允许你最好可靠地grep它们 out ; info更多"我做了这件事,我一直都会这样做。"