Python3日志记录排除某些模块?

时间:2016-07-29 22:43:52

标签: python-3.x

我在代码中使用的一些模块(paramiko)已经配置了日志记录,这会产生大量的日志消息。

如何仅从我的代码打印日志消息,而不是从导入的模块打印日志消息。

使用logging.basicConfig()

全局配置日志记录

2 个答案:

答案 0 :(得分:0)

请勿使用basicConfig。确保您的模块记录到他们自己的记录器而不是根记录器。

log = logging.getLogger('my_package')

log.debug('a message')

确保仅在单个模块中设置日志记录处理程序,通常在您调用的运行该工具的脚本中完成。获取包中使用的相同记录器,然后将处理程序添加到 该记录器。

log = logging.getLogger('my_package')
handler = logging.StreamHandler()
handler.setLevel(logging.DEBUG)
log.addHandler(handler)

您现在应该只能看到来自my_package记录器以及该记录器的任何子项的记录消息。

一个常见的惯例是将它放在您将要使用日志记录的每个模块的顶部

log = logging.getLogger(__name__)

这样,用于每个模块的记录器将只是该模块的导入路径。因此,如果您通过执行import package.module导入该模块,则记录器的名称也将为"package.module"。这样,您可以轻松指定要记录的特定记录器。

答案 1 :(得分:0)

如果您check out the logging module sourcethe docs,您会看到basicConfig配置根记录器,这是您通过

获得的记录器
logging.getLogger('')

如果您仔细阅读了日志记录文档,您会看到basicConfig正是 - 基本配置。你真的应该使用这样的东西:

logger = logging.getLogger(__name__)

然后,您可以在记录器中添加各种处理程序:

logger.setLevel(logging.DEBUG)
h = logging.StreamHandler()
h.setLevel(logging.DEBUG)
logger.addHandler(h)

现在,您的记录器只会显示来自您的程序的日志消息。