Created
August 6, 2014 05:13
-
-
Save 123Daoxyz/e66e7b1e4f47e7168978 to your computer and use it in GitHub Desktop.
logging module used in python project
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /usr/bin/env python | |
# -*- coding: utf-8 -*- | |
""" | |
log模块,这里利用了一些sys.modules和python系统库查找的一些trick。 | |
log模块第一次导入的时候,是作为一个文件被查找到的。查找成功后,文件会跑一个生成log实例的逻辑,然后把它加入到全局sys.modules字典里面。 | |
以后所有模块的`import log`动作都会绕开文件查找的过程,直接在sys.modules里面找这个模块。 | |
""" | |
#FIXME tornado的日志记录有点问题,经常会和testing的模块的日志混在一起。比如slave_ok这个字段。 | |
import sys | |
import logging.handlers | |
from settings import ACCESS_LOG_PATH, ERROR_LOG_PATH, LOG_NAME | |
from utils import get_real_file_path | |
# FIXME avoid to influence tornado log module | |
class Log(object): | |
ACCESS_LOG_PATH = get_real_file_path( | |
__file__, ACCESS_LOG_PATH) | |
ERROR_LOG_PATH = get_real_file_path( | |
__file__, ERROR_LOG_PATH) | |
FMT = ( | |
'[%(levelname)s][%(name)s:%(process)d][%(asctime)s]' + | |
': %(message)s') | |
def __init__(self, name): | |
log = logging.getLogger(name) | |
fmt = logging.Formatter(self.FMT) | |
afh = logging.handlers.TimedRotatingFileHandler( | |
self.ACCESS_LOG_PATH, 'D', 1, 7) | |
afh.setLevel(logging.INFO) | |
afh.setFormatter(fmt) | |
efh = logging.handlers.RotatingFileHandler( | |
self.ERROR_LOG_PATH, | |
maxBytes=1024*1024, backupCount=5) | |
efh.setLevel(logging.ERROR) | |
efh.setFormatter(fmt) | |
log.addHandler(afh) | |
log.addHandler(efh) | |
self.log = log | |
def __call__(self): | |
return self.log | |
sys.modules[__name__] = Log(LOG_NAME)() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment