在我的代码中,我使用logging.info(...
,之前我使用logging.basicConfig(filename=...
进行配置。是否可以在没有它们做任何事情的情况下将记录行保留在代码中?
答案 0 :(得分:1)
编辑:disabled
似乎不应该供公众使用。看看Maggyero对替代解决方案的回答。
只需禁用日志处理程序,它就不会再写任何内容了。
logging.getLogger().disabled = True
请注意,每个记录器都可以有处理程序,因此可能会有更多。
答案 1 :(得分:1)
在日志记录Python库中,可以通过以下方式完全禁用特定记录器的记录(对于所有级别):
logging.NullHandler()
处理程序(以避免logging.lastResort
处理程序并将其propagate
属性设置为False
(以避免父记录程序的处理程序),或通过lambda record: False
过滤器。代码示例:
import logging
# 1st solution
logging.getLogger("foo").addHandler(logging.NullHandler())
logging.getLogger("foo").propagate = False
# 2nd solution
logging.getLogger("foo").addFilter(lambda record: False)
警告。-与第一种解决方案相反,第二种解决方案不会禁用子记录器(例如logging.getLogger("foo.bar")
)的日志记录,因此,应该仅使用它来禁用子记录器的日志记录单个记录器。
注意。-将记录器的disabled
属性设置为True
并不是第三种解决方案,因为它不是公共API的一部分。参见https://bugs.python.org/issue36318。代码示例:
# NOT a 3rd solution
logging.getLogger("foo").disabled = True
或者,可以使用logging.config.dictConfig
函数获得相同的行为。代码示例:
import logging.config
# 1st solution
logging.config.dictConfig({
"version": 1,
"handlers": {
"null": {
"class": "logging.NullHandler"
}
},
"loggers": {
"foo": {
"handlers": ["null"],
"propagate": False
}
}
})
# 2nd solution
logging.config.dictConfig({
"version": 1,
"filters": {
"all": {
"()": lambda: (lambda record: False)
}
},
"loggers": {
"foo": {
"filters": ["all"]
}
}
})
答案 2 :(得分:0)
您可以使用:
logging.disable(logging.CRITICAL)
至disable all logging calls,其级别为CRITICAL或以下。实际上,这会禁用所有日志记录调用。
您可以通过执行以下操作再次启用所有记录器的记录(在他们自己的记录级别):
logging.disable(logging.NOTSET)
答案 3 :(得分:0)
如果要完全禁用日志,首先应在 logging.basicConfig()中将levevl设置为 logging.NOTSET ,因为它是零级,然后 logging.getLogger( ).disabled 设置为 True或False 。 https://docs.python.org/2/library/logging.html
完全禁用示例:
import logging
if __name__ == '__main__':
logging.disable(logging.NOTSET)
logging.basicConfig(
format="%(levelname) -10s %(asctime)s %(filename)s:%(lineno)s %(message)s",
level=logging.NOTSET)
logging.getLogger().disabled = True # True, False
logging.critical("Critical")
logging.error("Error")
logging.warning("Warning")
logging.info("Info")
logging.debug("Debug")