01.python logging

1.logging配置的方式

日志级别:NOTSET< DEBUG < INFO<WARNING<ERROR

1.使用INI格式文件
  • 优点:使用 logging.config.listen() 函数监听socket,可在运行过程中更新配置
  • 缺点:通过源码控制日志配置较少( 例如 子类化定制的过滤器或记录器)

logging_config.ini

[loggers]
keys=root

[handlers]
keys=stream_handler

[formatters]
keys=formatter

# 一级过滤
[logger_root]
level=DEBUG
handlers=stream_handler

# 二级过滤
[handler_stream_handler]
class=StreamHandler
level=DEBUG
formatter=formatter
args=(sys.stderr,)

[formatter_formatter]
format=[%(asctime)s] [%(name)-4s] [%(levelname)-4s] [%(message)s]

然后在源码中调用 logging.config.fileConfig() 方法

import logging
from logging.config import fileConfig

fileConfig('logging_config.ini')
logger = logging.getLogger()

logger.debug('this is a %s message', 'debug')
logger.info('this is a %s message', 'info')
logger.warn('this is a %s message', 'warn')
logger.error('this is a %s message', 'error')

输出:

 

2.使用字典或JSON格式文件
  • 优点:除了可在运行时动态更新,在Python 2.6之后,还可通过 json 模块从其它文件中导入配置
  • 缺点:很难通过源码控制日志配置

 

import logging
from logging.config import dictConfig

logging_config = dict(
    version=1,
    formatters={
        'f': {'format':
                  '[%(asctime)s] [%(name)-4s] [%(levelname)-4s] [%(message)s]'}
    },
    handlers={
        'h': {'class': 'logging.StreamHandler',
              'formatter': 'f',
              'level': logging.DEBUG}
    },
    root={
        'handlers': ['h'],
        'level': logging.DEBUG,
    },
)

dictConfig(logging_config)
logger = logging.getLogger()

logger.debug('this is a %s message', 'debug')
logger.info('this is a %s message', 'info')
logger.warn('this is a %s message', 'warn')
logger.error('this is a %s message', 'error')
3.使用源码
  • 优点:对配置绝对的控制
  • 缺点:对配置的更改需要对源码进行修改
import logging

logger = logging.getLogger()
handler = logging.StreamHandler()
formatter = logging.Formatter(
    '[%(asctime)s] [%(name)-4s] [%(levelname)-4s] [%(message)s]')
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)

logger.debug('this is a %s message', 'debug')
logger.info('this is a %s message', 'info')
logger.warn('this is a %s message', 'warn')
logger.error('this is a %s message', 'error')

  

备注:设置log输出文件
 logging.basicConfig(filename='xxx.log', filemode="w", level=logging.DEBUG)

  

posted @ 2018-03-01 17:29  桃源仙居  阅读(111)  评论(0)    收藏  举报