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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM