以上的答案是不真的是正确的 - 它只会将来自其他模块的消息的栏设置得更高。
一个非常快速的方法是使用这段代码:
import logging.config
logging.config.dictConfig({
'version': 1,
'disable_existing_loggers': True,
})
你必须导入所有模块后,设置此 - 这将禁用创建到这一点的所有记录。这在大多数情况下都能正常工作,但有些模块会在您创建类实例时创建它们的记录器(这将在您的代码中稍后发生)。
当你根据基本的Python教程,他们告诉你使用logging.basicConfig(...)
设置记录器。这是一个问题,因为这会将处理程序(也就是日志将被路由到的位置)设置为logging.lastResort
,这是全球范围内的Python 3.2开始的所有记录器的标准错误。这意味着您现在已经为所有模块启用了完整日志记录。
所以更好的方法是创建一个不同的记录器只为您的模块,并给它自己的一些处理程序,而不是使用basicConfig()
。
有这样做的方法有两种:
1)所有功能:
import logging
log = logging.getLogger(__name__)
log.setLevel(logging.DEBUG)
formatter = logging.Formatter(fmt="%(asctime)s %(levelname)s: %(message)s",
datefmt="%Y-%m-%d - %H:%M:%S")
ch = logging.StreamHandler(sys.stdout)
ch.setLevel(logging.DEBUG)
ch.setFormatter(formatter)
fh = logging.FileHandler("mylog.log", "w")
fh.setLevel(logging.DEBUG)
fh.setFormatter(formatter)
log.addHandler(ch)
log.addHandler(fh)
这会给你的记录log
,然后您可以使用像log.error("Error found")
。它将写入一个名为mylog.log的新文件,并且还会记录如此的sys.stdout。你可以根据自己的喜好来改变它。
2)使用的字典:
import logging
import logging.config
DEFAULT_LOGGING = {
'version': 1,
'formatters': {
'standard': {
'format': '%(asctime)s %(levelname)s: %(message)s',
'datefmt': '%Y-%m-%d - %H:%M:%S' },
},
'handlers': {
'console': {'class': 'logging.StreamHandler',
'formatter': "standard",
'level': 'DEBUG',
'stream': sys.stdout},
'file': {'class': 'logging.FileHandler',
'formatter': "standard",
'level': 'DEBUG',
'filename': 'live_detector.log','mode': 'w'}
},
'loggers': {
__name__: {'level': 'INFO',
'handlers': ['console', 'file'],
'propagate': False },
}
}
logging.config.dictConfig(DEFAULT_LOGGING)
log = logging.getLogger(__name__)
这将给予相同的结果上面,时间长一点,但也许更容易阅读。这会自动设定'disable_existing_loggers': True
。如果你不想这样做,你必须添加它并将其设置为False。