在Python中使用全局日志时需要注意的问题


Posted in Python onMay 06, 2015

在使用 uliweb 开发 soap webservice 后,启动 uliweb 时,werkzeug 的日志莫名其妙丢失了。

正常的日志:

[INFO]  * Loading DebuggedApplication...

[INFO]  * Running on http://localhost:8000/

[INFO]  * Restarting with reloader

[INFO]  * Loading DebuggedApplication...

异常的日志:

[INFO]  * Loading DebuggedApplication...

[INFO]  * Loading DebuggedApplication...

事实上, werkzeug 相关 INFO 及其以下级别的日志全部都看不到了,这太诡异了,于是果断提交了issue

而且我创建一个新的项目和 app 后,并没有日志丢失的问题,于是我怀疑是因为我从 uliweb 0.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         if not logging.root.handlers and _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]  * Running on http://localhost:8000/

[INFO]  * Restarting with reloader

也就是说,因为已经定义其它 logging handler 的原因,导致无法输出 werkzeug 日志

grep pysimplelib 下的结果

./client.py:33: logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.WARNING)

./simplexml.py:27:logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.WARNING)

./transport.py:30:logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.WARNING)

好吧,果然是这家伙在作祟,注释掉这三行代码后,werkzeug 日志正常输出

说起来,这不应该算是 uliweb 的问题,pysimplesoap 的库修改的全局设计,似乎应该给它提个 issue 才是, 这个 issue 应该可以关闭了。

这里有个 workaround,在 apps/settings.ini 中添加

[LOG.Loggers]

werkzeug = {'propagate':0, 'level': 'info', 'format':'format_simple'}

当然,建议 limodou 将 default_settings.ini 中的 zerkzeug 的日志级别默认设置成 info,因为这个问题实 在太诡异了,毕竟 werkzeug 中的默认日志级别就是 info。

好了,回顾一下,pysimplesoap 中因为覆盖了全局日志级别,导致 werkzeug 无法输入低于 warning 的日志,所以, 如果我们在开发开放 python 库的时候,还是将日志打在自己的命名空间下吧,不要去碰全局的 logging 设置,这样 会对别人造成困扰。

Python 相关文章推荐
跟老齐学Python之用Python计算
Sep 12 Python
Python编程中运用闭包时所需要注意的一些地方
May 02 Python
Windows下python2.7.8安装图文教程
May 26 Python
python 调用win32pai 操作cmd的方法
May 28 Python
python实现感知器
Dec 19 Python
Python3使用正则表达式爬取内涵段子示例
Apr 22 Python
python中将正则过滤的内容输出写入到文件中的实例
Oct 21 Python
Python生命游戏实现原理及过程解析(附源代码)
Aug 01 Python
Python实现随机生成任意数量车牌号
Jan 21 Python
Python 实现加密过的PDF文件转WORD格式
Feb 04 Python
Python快速优雅的批量修改Word文档样式
May 20 Python
Python线程池与GIL全局锁实现抽奖小案例
Apr 13 Python
python通过post提交数据的方法
May 06 #Python
python实现逆波兰计算表达式实例详解
May 06 #Python
编写Python脚本批量下载DesktopNexus壁纸的教程
May 06 #Python
在Windows服务器下用Apache和mod_wsgi配置Python应用的教程
May 06 #Python
利用Python脚本在Nginx和uwsgi上部署MoinMoin的教程
May 05 #Python
Python实现的HTTP并发测试完整示例
Apr 23 #Python
安装dbus-python的简要教程
May 05 #Python
You might like
PHP自动识别字符集并完成转码详解
2013/08/02 PHP
PHP把小数转成整数3种方法
2014/06/30 PHP
php自动给网址加上链接的方法
2015/06/02 PHP
PHP获取对象属性的三种方法实例分析
2019/01/03 PHP
JavaScript 编程引入命名空间的方法
2007/06/29 Javascript
调用innerHTML之后onclick失效问题的解决方法
2014/01/28 Javascript
js中的onchange和onpropertychange (onchange无效的解决方法)
2014/03/08 Javascript
javaScript中Math()函数注意事项
2015/06/18 Javascript
Js查找字符串中出现次数最多的字符及个数实例解析
2016/09/05 Javascript
浅谈vue-router 路由传参的方法
2017/12/27 Javascript
利用vscode调试编译后的js代码详解
2018/05/14 Javascript
详解vue项目中如何引入全局sass/less变量、function、mixin
2018/06/02 Javascript
JS获取并处理php数组的方法实例分析
2018/09/04 Javascript
详解处理Vue单页面应用SEO的另一种思路
2018/11/09 Javascript
webpack 代码分离优化快速指北
2019/05/18 Javascript
vue a标签点击实现赋值方式
2020/09/07 Javascript
[02:11]2014DOTA2 TI专访VG战队Fenrir:队伍气氛良好
2014/07/11 DOTA
[03:48]DOTA2完美大师赛主赛事第二日精彩集锦
2017/11/24 DOTA
python数据结构之二叉树的建立实例
2014/04/29 Python
Web服务器框架 Tornado简介
2014/07/16 Python
安装dbus-python的简要教程
2015/05/05 Python
Ubuntu下创建虚拟独立的Python环境全过程
2017/02/10 Python
Python 判断 有向图 是否有环的实例讲解
2018/02/01 Python
解决python大批量读写.doc文件的问题
2018/05/08 Python
python代理工具mitmproxy使用指南
2019/07/04 Python
python过滤中英文标点符号的实例代码
2019/07/15 Python
Python+OpenCV实现旋转文本校正方式
2020/01/09 Python
班级体育活动总结
2014/07/05 职场文书
超市创意活动方案
2014/08/15 职场文书
搞笑的爱情检讨书
2014/10/01 职场文书
2014年销售经理工作总结
2014/12/01 职场文书
三潭印月的导游词
2015/02/12 职场文书
处罚决定书范文
2015/06/24 职场文书
如何做好员工培训计划?
2019/07/09 职场文书
2019通用版导游词范本!
2019/08/07 职场文书
Spring Cloud Gateway去掉url前缀
2021/07/15 Java/Android