• 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)
  • 相关阅读:
    RHEL7 timedatectl命令
    广告点击率的贝叶斯平滑
    Expectation Propagation: Theory and Application
    微博推荐算法学习(Weibo Recommend Algolrithm)
    百度技术沙龙第48期回顾:大规模机器学习(含资料下载)
    内容匹配广告投放技术4:网盟CTR预估(百度文库课程)
    Logistic Regression的几个变种
    广告点击率预测 [离线部分]
    GBDT(MART) 迭代决策树入门教程 | 简介
    xgboost: 速度快效果好的boosting模型
  • 原文地址:https://www.cnblogs.com/renfanzi/p/6269943.html
Copyright © 2020-2023  润新知