文档章节

tornado 日志管理

极光火狐狸
 极光火狐狸
发布于 2016/08/07 10:54
字数 563
阅读 1200
收藏 15

更改日志输出格式

默认情况下,采用tornado的web框架运行起来之后,任何访问都会直接在控制台输出日志信息,格式如下:

[I 160807 09:27:17 web:1971] 200 GET / (::1) 7.00ms
[I 160807 09:27:23 web:1971] 200 GET /login (::1) 12.00ms

这条日志的信息量其实不小,每个字段的含义分别是:

I INFO
160807 日期
09:27:23 具体时间
web 模块名称
1971 在第几行执行打印输出的这条日志信息
200 GET / (::1) 7.00ms 输出的内容.

 

这样的日志格式以及信息也许符合 Ben Darnell 大神个人(或老外)的统一标准, 但是并不符合我的要求.

按照我理想中的日志格式,细化下来应该是这个样子的:

[2016-08-07 09:38:01 执行文件名:执行函数名:执行行数 日志等级] 内容消息

经过近3个小时的stackoverflow搜索(其实没有结果)、翻看官网介绍以及源码分析,最终我的实现方式是:

1. 在启动文件(main.py)中创建一个日志格式类(继承tornado.log.LogFormatter).

2. 重新定义输出格式(具体请参考下面提供的样例代码).

3. 重置logger.handlers对象的LogFormatter对象.

# 代码: tornado_loggerFormatter.py

# -.- coding:utf-8 -.-
# __author__ = 'zhengtong'
import tornado.ioloop
import tornado.web
import tornado.options
import tornado.httpserver
import tornado.concurrent
import tornado.log
import logging
import os

class Application(tornado.web.Application):
    def __init__(self):
        handlers = [
            ('/', DemoHandler),
        ]

        self.settings = dict(
            template_path=os.path.join(os.path.dirname(__file__), "templates"),
            static_path=os.path.join(os.path.dirname(__file__), "static"),
            cookie_secret='MEZzzzzzl4NkRWFtb3zzzzg3Y1JMZm5IMnBDcZEXOVhCNXNzzzzRWXJ6ax2d0pzzzz=',
            xsrf_cookies=True,
            compress_response=True,
            login_url='/',
        )
        super(Application, self).__init__(handlers, **self.settings)


class DemoHandler(tornado.web.RequestHandler):

    def get(self, *args, **kwargs):
        self.write('hello world!')


class LogFormatter(tornado.log.LogFormatter):

    def __init__(self):
        super(LogFormatter, self).__init__(
            fmt='%(color)s[%(asctime)s %(filename)s:%(funcName)s:%(lineno)d %(levelname)s]%(end_color)s %(message)s',
            datefmt='%Y-%m-%d %H:%M:%S'
        )


def main():
    tornado.options.define("port", default=80, help="run on the given port", type=int)
    tornado.options.parse_command_line()
    [i.setFormatter(LogFormatter()) for i in logging.getLogger().handlers]
    http_server = tornado.httpserver.HTTPServer(Application())
    http_server.listen(tornado.options.options.port)
    tornado.ioloop.IOLoop.current().start()


if __name__ == "__main__":
    main()

#运行结果

[2016-08-07 09:50:13 web.py:log_request:1971 INFO] 200 GET / (::1) 2.00ms

 

 

日志保存到文件中

...
...

def main():
    ...
    tornado.options.define("log_file_prefix", default="/tmp/tornado_main.log")
    tornado.options.parse_command_line()
    ...

 

 

日志文件按时间日期分割

...
...

def main():
    ...
    tornado.options.define("log_rotate_mode", default='time')   # 轮询模式: time or size
    tornado.options.define("log_rotate_when", default='S')      # 单位: S / M / H / D / W0 - W6
    tornado.options.define("log_rotate_interval", default=60)   # 间隔: 60秒
    ...

 

© 著作权归作者所有

共有 人打赏支持
极光火狐狸
粉丝 11
博文 29
码字总数 14739
作品 0
普陀
私信 提问
ubuntu下python+tornado+supervisor+nginx部署

由于项目需要,老师让我写一个小web系统,之前都是用java写web,想到自己最近学机器学习要用python,所以用python来写一下,此外,因为想用点新东西,也介于程序比较小,所以考虑用mongodb来...

PilgrimHui
2017/07/13
0
0
tornado总结10-日志配置

tornado源代码分析 打开site-packages/tornado/log.py,最开头的注释文档说明了tornado的日志模块是直接和logging模块集成的 """Logging support for Tornado. Tornado uses three logger st...

能东棍
2016/11/28
434
0
日志小树林 - Loggrove

Loggrove 是对日志文件进行 阅读、轮询、关键词匹配 的 Web服务。 超轻组件 Python 3.6 + MySQL 5.7 Tornado 5.0.1 JQuery 3.1.0 Bootstrap 3.3 Sb-admin 2.0 Web UI 界面 简洁大方的 Web UI...

哦我
06/20
0
0
Tornado源码阅读

Tornado (龙卷风) 是一个纯java写的web server,下载了Tornado 的源码看了一下. 官方svn(https://tornado.svn.sourceforge.net/svnroot/tornado/trunk/)没有提供另外两个依赖包,不过在sourcef...

麦田小圈圈
2009/09/17
2.7K
11
Go 应用框架--beego

beego是一个用Go开发的应用框架,思路来自于tornado,路由设计来源于sinatra,支持如下特性 MVC REST 智能路由 日志调试 配置管理 模板自动渲染 layout设计 中间件插入逻辑 方便的JSON/XML服...

astaxie
2012/12/18
57.2K
7

没有更多内容

加载失败,请刷新页面

加载更多

mysql 时间格式化

DATE_FORMAT

1713716445
14分钟前
1
0
聊聊flink的PartitionableListState

序 本文主要研究一下flink的PartitionableListState PartitionableListState flink-runtime_2.11-1.7.0-sources.jar!/org/apache/flink/runtime/state/DefaultOperatorStateBackend.java /*......

go4it
19分钟前
1
0
Micropython教程之TPYBoard开发板制作电子时钟(萝卜学科编程教育)

1.实验目的 1. 学习在PC机系统中扩展简单I/O?接口的方法。 2. 什么是SPI接口。 3. 学习TPYBoard I2C接口的用法。 4. 学习LCD5110接线方法。 5. 设定时钟并将当前时间显示在LCD5110上。 2.所需...

bodasisiter
20分钟前
1
0
js 闭包

闭包,是 Javascript 比较重要的一个概念,对于初学者来讲,闭包是一个特别抽象的概念,特别是 ECMAScript 规范给的定义,如果没有实战经验,很难从定义去理解它。因此,本文不会对闭包的概念...

MrBoyce
24分钟前
1
0
Java B2B2C o2o多用户商城 springcloud架-企业云架构common-service代码结构分析

当前的分布式微服务云架构平台使用Maven构建,所以common-service的通用服务按照maven构建独立的系统服务,结构如下: particle-commonservice: spring cloud 系统服务根项目,所有服务项目...

itcloud
30分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部