我使用导入大量库的repo在一个系统上工作。这些使用了Python记录器工具。我只会收到事件logger.error及更高版本的消息。
我搬到了另一个系统并克隆了相同的repos(和库)。现在,我得到logger.info()和更高版本。我做了一些搜索,但我无法找到保存用户记录器中央配置的位置。我不确定从第一个系统到第二个系统有什么变化,但我希望能够拥有第一个系统的功能。
澄清:记录器'过滤器'应用于不仅由软件生成的消息,还应用于它使用的库。
有什么想法吗?
答案 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.bar
是foo
的子记录器。当然,请参阅the logging module's documentation。
一个最后意见:如果 是您的代码库,并且您看到太多的日志行,请考虑将其中一些移到{{1 }};我发现debug
是一个记录系统健康状况的好地方,例如"这个对其他服务器的请求耗时n秒" (一个真正的衡量标准系统当然是一个更好的选择,如果你有一个,但有时你拥有的是日志);这使得一个简单的grep看看该请求是否很慢,并且如果它太嘈杂(通过剔除信息行),仍然允许你最好可靠地grep它们 out ; info
更多"我做了这件事,我一直都会这样做。"