Last active
August 29, 2015 14:20
-
-
Save azhai/9bd7158ee27b740617f8 to your computer and use it in GitHub Desktop.
多进程安全日志
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
#-*- coding: utf-8 -*- | |
import os.path | |
import logging | |
from mlogging import FileHandler_MP, TimedRotatingFileHandler_MP | |
from functools import partial | |
class LevelFilter(logging.Filter): | |
def __init__(self, level, *args, **kwargs): | |
self.level = level | |
def filter(self, record): | |
return record.levelno == self.level | |
def create_logger(name, logging_dir, level = 'NOTSET', | |
filter = None, handler_class = TimedRotatingFileHandler_MP): | |
logging_file = os.path.join(logging_dir, name+".log") | |
handler = handler_class(logging_file, "midnight", 1) | |
handler.setFormatter( logging.Formatter( | |
"%(asctime)s %(levelname)-8s %(name)-20s %(message)s", #设置日志格式,固定宽度便于解析 | |
datefmt = "%Y-%m-%d %H:%M:%S" #设置asctime时间格式 | |
)) | |
handler.suffix = "%Y%m%d" | |
if isinstance(filter, logging.Filter): | |
handler.addFilter(filter) #加载过滤器 | |
logger = logging.getLogger(name) | |
logger.setLevel(getattr(logging, level)) #设置级别,DEBUG/INFO/WARNING/ERROR/CRITICAL | |
#有些Python版本会报错KeyError,找不到clientip或user,这里用一个短横(-)做默认值 | |
extra={"clientip":"-", "user":"-"} | |
#exc_info是出错时的Debug详细回溯信息,这里禁止记录,只记录错误信息这一行 | |
setattr(logger, "_log", partial(logger._log, exc_info=False, extra=extra)) | |
logger.addHandler(handler) | |
return logger | |
if __name__ == "__main__": | |
logger = create_logger("test", "./", 'INFO') | |
logger.debug("低级别的DEBUG,不会记录。") | |
logger.info("哈哈哈,这才是我想要的信息,请记下来。") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment