假设我将--debug
的参数传递给我的脚本,我希望它显示其他文本,否则默认情况下不显示它。
这里要保持简单。如何让logger.debug
显示/记录?如果传递--debug
,它只是“启用”吗?
import logging
logger = logging.getLogger()
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
fh = logging.FileHandler('xyz.log')
fh.setLevel(logging.INFO)
fh.setFormatter(formatter)
logger.addHandler(fh)
logger.error("This is an error")
logger.info("Info 123")
logger.debug("FYI, here's what you don't see unless you enable me.")
也许?
fh.setLevel(logging.DEBUG)
if option == 'debug'
logger.debug("FYI, here's what you don't see unless you enable me.")
答案 0 :(得分:4)
Python日志系统非常复杂,在访谈中值得提问。
logger = logging.getLogger(__name__)
logger.debug("FYI, here's what you don't see unless you enable me.")
要查看该消息,请说,您需要控制台:
__name__
)或某些级别DEBUG
的父记录器(例如根记录器)。stdout
的处理程序附加到当前模块或其某些级别DEBUG
的父级的记录器。使用dictConfig
可以更轻松地设置日志记录配置:
import logging.config
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'simple': {
'format': '%(levelname)s: %(message)s'
},
},
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
},
},
'loggers': {
'': {
'level': 'DEBUG',
'handlers': ['console'],
},
},
}
logging.config.dictConfig(LOGGING)
logging.getLogger(__name__).debug('This is a debug message')
在上面的示例中,您将在控制台中看到该消息。
但是如果您将根记录器或控制台处理程序的级别更改为INFO
- 您将看不到该消息。
将日志记录配置保存在一个独立的,依赖于环境的文件中。
在摆弄日志记录配置时,请参阅一个非常有用的包:http://rhodesmill.org/brandon/2012/logging_tree/
答案 1 :(得分:2)
fh = logging.FileHandler('xyz.log')
fh.setLevel(logging.DEBUG if option == 'debug' else logging.INFO)
fh.setFormatter(formatter)
logger.addHandler(fh)
答案 2 :(得分:2)
它正在显示记录logger.info
,因为它是您使用fh.setLevel(logging.INFO)
设置的记录。根据选项,使用fh.setLevel(logging.DEBUG)
注册logger.debug
个电话或两者。如果要保持INFO
和DEBUG
分开,您还可以拥有多个Filehandler。请记住,您的日志存储在xyz.log中 - 如果您想在运行时调用logger.disabled = True
期间停止记录。