Skip to content

Instantly share code, notes, and snippets.

@azhai
Last active August 29, 2015 14:20
Show Gist options
  • Save azhai/9bd7158ee27b740617f8 to your computer and use it in GitHub Desktop.
Save azhai/9bd7158ee27b740617f8 to your computer and use it in GitHub Desktop.
多进程安全日志
#-*- 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