【发布时间】:2021-12-18 21:13:35
【问题描述】:
原标题是“How to find a problen in python logging configuration?”
我有一个相当大的项目,有很多记录器。我有运行项目的包装器,它有一些日志记录。一切正常。
然后我制作了另一个包装器以将项目作为cherrypy 提供服务,并注意到我有日志记录问题。
我经常与设置作斗争,但没有将任何其他日志打印到文件中。
这是我的cherrypy wrapper 的日志配置。
{
'formatters': {
'standard': {
'format': '%(message)s'
},
},
'handlers': {
'b2_debug': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'formatter': 'standard',
'filename': 'b2_debug.log',
'maxBytes': 1048576,
'backupCount': 20,
'encoding': 'utf8'
},
'cherrypy_access': {
# same as b2_debug, but another filename]
},
'cherrypy_error': {
# same as b2_debug, but another filename]
},
},
'loggers': {
'': {
'handlers': ['b2_debug'],
'level': 'DEBUG'
},
'cherrypy.access': {
'handlers': ['cherrypy_access'],
'level': 'INFO',
'propagate': False
},
'cherrypy.error': {
'handlers': ['cherrypy_error'],
'level': 'INFO',
'propagate': False
},
}
}
我有很多活跃的记录器,但在cherrypy下不知何故b2_debug.log是空的。
两个问题:
-
如何调试记录器的行为?当我执行
logging.getLogger('test').warn('test')时,是否有任何工具可以跟踪事件的移动? -
知道什么会导致 root
''logger 不记录任何内容吗?看起来有些东西会覆盖根记录器的行为。
我已经对简单的单一文件进行了测试,一切正常。但是我不知道如何找到非常大的项目的问题。
【问题讨论】:
-
您使用的是相对路径名。尝试绝对路径。它可能正在写日志,但只是在与您想象的不同的地方。您可以在日志语句之前进入调试器并单步执行它以查看它的去向。具体如何做到这一点因环境而异。如果您在同一台机器上,一个简单的
breakpoint()就可以做到。我搜索了“debug cherrypy”并得到了一些有趣的结果。当您到达要写入的文件时,文件对象的name属性加上os.path.abspath将是一个很好的线索。 -
您确定您正在使用日志记录级别 DEBUG 测试应用程序吗?否则,调试处理程序永远不会记录任何内容。
-
@cyraxjoe 是的,但我也使用警告和临界水平