按日期打印Python的Tornado框架中的日志的方法


Posted in Python onMay 02, 2015

网站流量上来后,日志按天甚至小时存储更方便查看和管理,而Python的logging模块也提供了TimedRotatingFileHandler来支持以不同的时间维度归档日志。
然而根据Logging HOWTO的官方指南设置后,却发现新的日志只剩下root的,Tornado内部的logger全部没有生效。
参考stackoverflow上的一个回答,我发现下面的配置能让Tornado内部的logger也用上TimedRotatingFileHandler:

# logging.yaml

version: 1
disable_existing_loggers: false
formatters:
 simple:
  format: '%(asctime)s - %(name)s - %(levelname)s - %(message)s'

loggers:
 all:
  handlers: [all]
  propagate: false
 tornado:
  handlers: [all]
  propagate: false

handlers:
 console:
  class: logging.StreamHandler
  level: INFO
  formatter: simple
  stream: ext://sys.stdout
 all:
  class: logging.handlers.TimedRotatingFileHandler
  level: INFO
  formatter: simple
  when: midnight
  filename: ./logs/server.log

root:
 level: INFO
 handlers: [console, all]
 propagate: true

只需在Tornado的入口代码处调用:

logging.config.dictConfig(yaml.load(open('logging.yaml', 'r')))
  •     如果你想按别的时间维度分割日志,修改when参数对应的值就可以了。
  •     特别注意:当when的值是D,表示由服务器启动的时间计起,每过24小时归档一次;而如果你和我一样,希望在每天的凌晨归档日志的话,可以配置为midnight。
  • Centos系统可能需要先安装python-yaml:sudo yum install python-yaml
Python 相关文章推荐
python中zip和unzip数据的方法
May 27 Python
用python简单实现mysql数据同步到ElasticSearch的教程
May 30 Python
Python中的CSV文件使用"with"语句的方式详解
Oct 16 Python
python快排算法详解
Mar 04 Python
Python学习笔记之字符串和字符串方法实例详解
Aug 22 Python
python子线程退出及线程退出控制的代码
Oct 16 Python
Python函数的默认参数设计示例详解
Dec 01 Python
python如何获取apk的packagename和activity
Jan 10 Python
python发qq消息轰炸虐狗好友思路详解(完整代码)
Feb 15 Python
Python unittest如何生成HTMLTestRunner模块
Sep 08 Python
Python根据URL地址下载文件并保存至对应目录的实现
Nov 15 Python
python使用pywinauto驱动微信客户端实现公众号爬虫
May 19 Python
详细解读Python的web.py框架下的application.py模块
May 02 #Python
使用Python的web.py框架实现类似Django的ORM查询的教程
May 02 #Python
在ironpython中利用装饰器执行SQL操作的例子
May 02 #Python
用Python编写简单的定时器的方法
May 02 #Python
用Python程序抓取网页的HTML信息的一个小实例
May 02 #Python
在Mac OS上部署Nginx和FastCGI以及Flask框架的教程
May 02 #Python
在Python的Django框架中用流响应生成CSV文件的教程
May 02 #Python
You might like
屏蔽浏览器缓存另类方法
2006/10/09 PHP
PHP中for循环语句的几种变型
2007/03/16 PHP
php组合排序简单实现方法
2016/10/15 PHP
BOOM vs RR BO5 第四场 2.14
2021/03/10 DOTA
DOM相关内容速查手册
2007/02/07 Javascript
Javascript 垃圾收集机制介绍理解
2013/05/14 Javascript
javascript学习笔记(七)Ajax和Http状态码
2014/10/08 Javascript
js与C#进行时间戳转换
2014/11/14 Javascript
Angular-Touch库用法示例
2016/12/22 Javascript
Vue组件tree实现树形菜单
2017/04/13 Javascript
underscore之Collections_动力节点Java学院整理
2017/07/10 Javascript
微信小程序 自定义消息提示框
2017/08/06 Javascript
NodeJS收发GET和POST请求的示例代码
2017/08/25 NodeJs
基于angular-utils-ui-breadcrumbs使用心得(分享)
2017/11/03 Javascript
结合axios对项目中的api请求进行封装操作
2020/09/21 Javascript
[01:20:37]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
[35:55]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第一场 12.11
2020/12/13 DOTA
python避免死锁方法实例分析
2015/06/04 Python
python如何实现远程控制电脑(结合微信)
2015/12/21 Python
关于Python中异常(Exception)的汇总
2017/01/18 Python
Python利用Beautiful Soup模块修改内容方法示例
2017/03/27 Python
python实现数据图表
2017/07/29 Python
python下载文件记录黑名单的实现代码
2017/10/24 Python
python机器学习之随机森林(七)
2018/03/26 Python
python分数表示方式和写法
2019/06/26 Python
Python PIL图片添加字体的例子
2019/08/22 Python
python函数不定长参数使用方法解析
2019/12/14 Python
Python替换NumPy数组中大于某个值的所有元素实例
2020/06/08 Python
美国最受欢迎的度假租赁网站:VRBO
2016/08/02 全球购物
解决python 输出到csv 出现多空行的情况
2021/03/24 Python
会计自我鉴定范文
2013/10/06 职场文书
经理助理岗位职责
2014/03/05 职场文书
2014城乡环境综合治理工作总结
2014/12/19 职场文书
个人政治思想总结
2015/03/05 职场文书
分析mysql中一条SQL查询语句是如何执行的
2021/06/21 MySQL
Java 数据结构七大排序使用分析
2022/04/02 Java/Android