博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Python Logging模块

Posted on 2014-03-19 16:01  Beat-Cat  阅读(744)  评论(0)    收藏  举报

  最近在学习openstack时,发现其大部分组件都使用了类似的框架结构,基本上是由一些开源模块搭建起来的,为了能更好地学习openstack,需要对这些开源模块进行深入学习,下面就先由logging开始吧。

  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:设置日志输出格式

  handler:设置日志输出方式,比如是否支持备份等等

  logger:一旦创建,对于python解释器来说是一个全局对象: 

      文件A: logging.getLogger('test')

      文件B: logging.getLogger('test')  ---->此处取出的logger对象和文件A具有相同的配置,为同一个对象

  logging支持读取配置文件进行初始化,一般项目中都喜欢这种方式:

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=