tornado 增加日志模块

 log类

#!/usr/bin/env python
# -*-  coding:utf-8 -*-

import logging.handlers

class Logger(logging.Logger):
    def __init__(self, filename=None):
        super(Logger, self).__init__(self)
        # 日志文件名
        if filename is None:
            filename = 'cgss.log'
        self.filename = filename

        # 创建一个handler,用于写入日志文件 (每天生成1个,保留30天的日志)
        fh = logging.handlers.TimedRotatingFileHandler(self.filename, 'D', 1, 5)
        fh.suffix = "%Y%m%d-%H%M.log"
        fh.setLevel(logging.DEBUG)

        # 再创建一个handler,用于输出到控制台
        ch = logging.StreamHandler()
        ch.setLevel(logging.DEBUG)

        # 定义handler的输出格式
        formatter = logging.Formatter('[%(asctime)s] - %(filename)s [Line:%(lineno)d] - [%(levelname)s]-[thread:%(thread)s]-[process:%(process)s] - %(message)s')
        fh.setFormatter(formatter)
        #ch.setFormatter(formatter)

        # 给logger添加handler
        self.addHandler(fh)
        #self.addHandler(ch)

handler类

class test(tornado.web.RequestHandler):
    def get(self):
        log = Logger()

        # 输出日志
        log.info("日志模块消息!")
        log.debug("日志模块调试消息!")
        log.error("日志模块错误消息!")

        self.write("hello world")

源链接:http://blog.csdn.net/cyh1111/article/details/53405795

详解

TimedRotatingFileHandler的构造函数定义如下(2.5版本API为例):
TimedRotatingFileHandler(filename [,when [,interval [,backupCount]]])
filename 是输出日志文件名的前缀
when 是一个字符串的定义如下:
“S”: Seconds
“M”: Minutes
“H”: Hours
“D”: Days
“W”: Week day (0=Monday)
“midnight”: Roll over at midnight
interval 是指等待多少个单位when的时间后,Logger会自动重建文件,当然,这个文件的创建
取决于filename+suffix,若这个文件跟之前的文件有重名,则会自动覆盖掉以前的文件,所以
有些情况suffix要定义的不能因为when而重复。
backupCount 是保留日志个数。默认的0是不会自动删除掉日志。若设10,则在文件的创建过程中
库会判断是否有超过这个10,若超过,则会从最先创建的开始删除。

 2.7日志模块与3.5的区别

python2.7 支持绝对路径和相对路径, 而3.5默认是相对路径
如果3.5使用相对路径的话

if filename is None:
            filepath = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))), "cgss.log")
            filename = filepath2
        self.filename = filename

绝对路径呢?

if filename is None:
            filepath2 = os.path.abspath("/opt/code/my_code/readerwriter_file_mysql/cgss.log")
            filename = filepath2
        self.filename = filename

还需要注意个地方就是日志模块不支持多进程

刚才去瞄了一下官网,有更详细的解释,可以去看看,推荐去官网

详情:http://blog.csdn.net/yongche_shi/article/details/49890103

# 创建一个handler,用于写入日志文件 (每天生成1个,保留30天的日志)
        # fh = logging.handlers.TimedRotatingFileHandler(self.filename, 'D', 1, 5)
        fh = logging.handlers.WatchedFileHandler(self.filename)
原文地址:https://www.cnblogs.com/renfanzi/p/6269943.html