最近在學習openstack時,發現其大部分組件都使用了相似的框架結構,基本上是由一些開源模塊搭建起來的,爲了能更好地學習openstack,須要對這些開源模塊進行深刻學習,下面就先由logging開始吧。python
logging,顧名思義,是用來作日誌處理的模塊,其功能很是強大,不只能將日誌寫入文件,還能將日誌以http/tcp/udp協議的對外發送。框架
1 LOG_FILE = 'tst.log' 2 3 handler = logging.handlers.RotatingFileHandler(LOG_FILE, maxBytes=1024 * 1024, backupCount=5) 4 fmt = '%(asctime)s - %(filename)s:%(lineno)s - %(name)s - %(message)s' 5 6 formatter = logging.Formatter(fmt) 7 handler.setFormatter(formatter) 8 logger = logging.getLogger('test') 9 logger.addHandler(handler) 10 logger.setLevel(logging.DEBUG) 11 12 handler2 = logging.StreamHandler(sys.stderr) 13 handler2.setFormatter(formatter) 14 15 logger = logging.getLogger('test.1') #必須test.x 纔會與test共享配置 16 handler2.setLevel(logging.INFO) 17 logger.addHandler(handler2) 18 19 logger.info('first info message') 20 #logger.removeHandler(handler2) 21 logger.debug('first debug message')
formatter:設置日誌輸出格式tcp
handler:設置日誌輸出方式,好比是否支持備份等等學習
logger:一旦建立,對於python解釋器來講是一個全局對象: spa
文件A: logging.getLogger('test')debug
文件B: logging.getLogger('test') ---->此處取出的logger對象和文件A具備相同的配置,爲同一個對象日誌
logging支持讀取配置文件進行初始化,通常項目中都喜歡這種方式:code
import logging import logging.config logging.config.fileConfig("logging.conf") logger = logging.getLogger("simpleExample") logger.debug("debug message") logger.info("info message") logger.warn("warn message") logger.error("error message") logger.critical("critical message")
[loggers] keys=root,simpleExample [handlers] keys=consoleHandler [formatters] keys=simpleFormatter [logger_root] level=DEBUG handlers=consoleHandler [logger_simpleExample] level=DEBUG handlers=consoleHandler qualname=simpleExample propagate=0 [handler_consoleHandler] class=StreamHandler level=DEBUG formatter=simpleFormatter args=(sys.stdout,) [formatter_simpleFormatter] format=%(asctime)s - %(name)s - %(filename)s:%(lineno)s - %(levelname)s - %(message)s datefmt=