在Python中使用全局日志时需要注意的问题
在使用uliweb开发soapwebservice后,启动uliweb时,werkzeug的日志莫名其妙丢失了。
正常的日志:
[INFO] *LoadingDebuggedApplication... [INFO] *Runningonhttp://localhost:8000/ [INFO] *Restartingwithreloader [INFO] *LoadingDebuggedApplication...
异常的日志:
[INFO] *LoadingDebuggedApplication... [INFO] *LoadingDebuggedApplication...
事实上,werkzeug相关INFO及其以下级别的日志全部都看不到了,这太诡异了,于是果断提交了issue
而且我创建一个新的项目和app后,并没有日志丢失的问题,于是我怀疑是因为我从uliweb0.1.3升级到0.1.4导致的,我的项目是使用0.1.3创建的,之前也没有注意过日志的问题,但是得到limodou的答复后,我否定了这一点
- uliweb在创建项目时不会生成象Django一样的manage.py之类的东西,就是settings.py等一些配置文件和启动文件,都是和版本无关的。
仔细想想,我的项目和新创建的项目的区别在于settings.ini丰富了一些,然后用了pysimplelib,好吧,从源码追踪吧。
我看了uliweb内置的zerkzeug代码,创建日志这里很明确
uliweb/lib/werkzeug/serving.py
112 ifnotlogging.root.handlersand_logger.level==logging.NOTSET: 113 _logger.setLevel(logging.INFO) 114 handler=logging.StreamHandler() 115 _logger.addHandler(handler)[code]
当全局logging.root中已经定义了Handler或者werkzeug没有定义日志级别,werkzeug会将其logger的日志级别设置为info,而打印werkzeug日志的地方,恰巧用了info级别
[code][INFO] *Runningonhttp://localhost:8000/ [INFO] *Restartingwithreloader