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)