Python的日志模块1

基本实例

import logging

# 创建一个logger
logger = logging.getLogger('mylogger')
logger.setLevel(logging.DEBUG)

# 创建一个handler,用于写入日志文件
fh = logging.FileHandler('test.log')
fh.setLevel(logging.DEBUG)

# 再创建一个handler,用于输出到控制台
sh = logging.StreamHandler()
sh.setLevel(logging.DEBUG)

# 定义handler的输出格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)

# 给logger添加handler
logger.addHandler(fh)
logger.addHandler(sh)

基本函数API

logging.getLogger([name])

返回一个logger实例,如果没有指定name,返回root logger。只要name相同,返回的logger实例都是同一个而且只有一个,即name和logger实例是一一对应的。这意味着,无需把logger实例在各个模块中传递。只要知道name,就能得到同一个logger实例。

logger.setLevel(/v/)

设置logger的level,数值越高,优先级越高。取值如下:

Level Numeric value 2
CRITICAL 50
ERROR 40
WARNING 30
INFO 20
DEBUG 10
NOTSET 0

如果把logger的级别设置成INFO,那么小于INFO级别的日志都不输出,大于等于INFO级别的日志都输出。

logger.addHandler(hdlr)

通过handler对象可以把日志内容写到不同的地方。比如简单的StreamHandler就是把日志写到类似文件的地方。python提供了十几种实用handler,比较常用有:

  • StreamHandler: 输出到控制台
  • FileHandler: 输出到文件
  • BaseRotatingHandler 可以按时间写入到不同的日志中。比如将日志按天写入不同的日期结尾的文件文件。
  • SocketHandler 用TCP网络连接写LOG
  • DatagramHandler 用UDP网络连接写LOG
  • SMTPHandler 把LOG写成EMAIL邮寄出去

logging.basicConfig([**kwargs])

这个函数用来配置root logger, 为root logger创建一个StreamHandler,设置默认的格式。
这些函数: logging.debug()、logging.info()、logging.warning()、logging.error()、logging.critical() 如果调用的时候发现root logger没有任何handler,会自动调用basicConfig添加一个handler
如果root logger已有handler,这个函数不做任何事情使用basicConfig来配置root logger的输出格式和level:

import logging
logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.DEBUG)
logging.debug('This message should appear on the console')

你可能感兴趣的:(Python的日志模块1)