Python logging 分级日志
330 views
0
Python logging 分级日志,按照日志优先等级,分别记录日志到不同等级的文件中。
日志等级:
CRITICAL = FATAL > ERROR > WARNING = WARN > INFO > DEBUG > NOTSET
记录日志到文件:
代码示例:
文件: common/logger.py
#!/usr/bin/env python # -*- coding: utf-8 -*- # copyright by mimvp.com ''' 日志分级过滤 CRITICAL = FATAL > ERROR > WARNING = WARN > INFO > DEBUG > NOTSET ''' import os import logging from logging.handlers import RotatingFileHandler class LevelFilter(logging.Filter): def __init__(self, name): self.name = name def filter(self, record): return record.levelno == self.name class Logger(object): LOGGER_FILE_DIR = 'logs' LOGGER_FILE_NAME = 'cibn_videodown.log' LOGGER_FILE = os.path.join(LOGGER_FILE_DIR, LOGGER_FILE_NAME) if not os.path.exists(LOGGER_FILE_DIR): os.makedirs(LOGGER_FILE_DIR) _fmt = logging.Formatter("%(message)s") _consoleHandler = logging.StreamHandler() _consoleHandler.setFormatter(_fmt) _debugHandler = RotatingFileHandler(filename=LOGGER_FILE+'._debug', maxBytes=1024*1024*1024, backupCount=5) _debugHandler.setFormatter(_fmt) _debugHandler.addFilter(LevelFilter(logging.DEBUG)) _infoHandler = RotatingFileHandler(filename=LOGGER_FILE+'._info', maxBytes=1024*1024*1024, backupCount=5) _infoHandler.setFormatter(_fmt) _infoHandler.addFilter(LevelFilter(logging.INFO)) _warnHandler = RotatingFileHandler(filename=LOGGER_FILE+'._warn', maxBytes=1024*1024*1024, backupCount=5) _warnHandler.setFormatter(_fmt) _warnHandler.addFilter(LevelFilter(logging.WARN)) _errorHandler = RotatingFileHandler(filename=LOGGER_FILE+'._error', maxBytes=1024*1024*1024, backupCount=5) _errorHandler.setFormatter(_fmt) _errorHandler.addFilter(LevelFilter(logging.ERROR)) _fatalHandler = RotatingFileHandler(filename=LOGGER_FILE+'._fatal', maxBytes=1024*1024*1024, backupCount=5) _fatalHandler.setFormatter(_fmt) _fatalHandler.addFilter(LevelFilter(logging.FATAL)) @classmethod def _set_use_fmt(cls): _fmt = logging.Formatter("%(asctime)-15s (%(name)s) - %(filename)s [line : %(lineno)d] %(levelname)-8s: %(message)s") Logger._consoleHandler.setFormatter(_fmt) Logger._debugHandler.setFormatter(_fmt) Logger._infoHandler.setFormatter(_fmt) Logger._warnHandler.setFormatter(_fmt) Logger._errorHandler.setFormatter(_fmt) Logger._fatalHandler.setFormatter(_fmt) @classmethod def get_logger(cls, name, level=logging.DEBUG, use_fmt=True): if use_fmt: Logger._set_use_fmt() _logger = logging.getLogger(name) _logger.addHandler(Logger._consoleHandler) _logger.addHandler(Logger._debugHandler) _logger.addHandler(Logger._infoHandler) _logger.addHandler(Logger._warnHandler) _logger.addHandler(Logger._errorHandler) _logger.addHandler(Logger._fatalHandler) _logger.setLevel(level) return _logger if __name__ == '__main__': logger = Logger.get_logger('Logger') # logger = Logger.get_logger('Logger', use_fmt=False) logger.debug('i am debug') logger.info('i am info') logger.warn('i am warn') logger.error('i am error') logger.fatal('i am fatal')
运行结果:
2015-04-13 16:19:19,234 (Logger) - logger.py [line : 89] DEBUG : i am debug
2015-04-13 16:19:19,234 (Logger) - logger.py [line : 90] INFO : i am info
2015-04-13 16:19:19,235 (Logger) - logger.py [line : 91] WARNING : i am warn
2015-04-13 16:19:19,235 (Logger) - logger.py [line : 92] ERROR : i am error
2015-04-13 16:19:19,235 (Logger) - logger.py [line : 93] CRITICAL: i am fatal
参考推荐:
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2015-04-17 02:20:15
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!