默认log将日志打印到屏幕,log的默认等级是warning,高于warning的信息打印,低于warning的信息不打印。

用logger.setLevel(logging.DEBUG)设置log等级。

打印日志等级的不肯定的想法:

logger和handler都可以设置日志等级,handler最先接受日志信息,将高于handler等级的留下,低于的丢掉;传给logger后,logger再做一遍比较,进行保留和丢掉,最终写进日志文件的信息是按照最高的那个日志等级来的。


logger:提供日志接口,供代码使用。多次使用相同name来调用getLogger返回同一个logger对象。

handler:定义日志文件名,文件最大字节数,最多日志文件数目。一个logger可以有多个handler。

filter:决定是否将一个日志记录发送到handler。

formatter:指定日志记录的输出格式。

只有消息级别大于logger和handler级别才会往日志文件中记录。

logger的几种handle方式:

logging.StreamHandler:日志输出到流,可以是sys.stderr或者sys.stdout


log 的配置可采用代码中配置,或者在配置文件中配置。

(1):在代码中配置log:

用这种方法,在py文件一次次启动过程中handler的设定依旧有效。

import logging
import logging.handlers
LOG_FILE = 'tst.log'
#asctime是到毫秒的
fmt = '%(asctime)s - %(filename)s:%(lineno)s - %(name)s - %(message)s'
#创名为tst的logger对象
logger = logging.getLogger('tst')
logger.setLevel(logging.DEBUG) #设置log等级
#创建handler,指定log文件,文件最大容量,文件备份个数
handler = logging.handlers.RotatingFileHandler(LOG_FILE,maxBytes = 10*1024*1024,backupCount = 5)
#实例化一个foramtter
formatter = logging.Formatter(fmt)
handler.setFormatter(formatter) #把formatter添加到handler
logger.addHandler(handler) #把handler添加到logger

logger.info('first info message')
logger.debug('first debug message')
######   输出   ######
#2014-10-22 10:02:14,667 - 111.py:19 - tst - first info message
#2014-10-22 10:02:14,673 - 111.py:20 - tst - first debug message
######          ######

######   总结   ######

创建formatter,添加到已创建的handler;添加handler到已创建的logger

(2)也可以这样来:

import logging

logging.basicConfig(level=logging.DEBUG,\

foramt='%(asctime)s %(filename)s:[line:%(lineno)d] %(levelname)s %(message)s'\

datefmt='%a,%d %b %Y %H:%M:%S',\

filename='my.log',\

filemode='w')#分为‘a’和‘w’两种模式。添加,写。

logging.debug('debug info')

logging.warning('warning info')

logging.info('info info')

######   总结   ######

logging.basicConfig函数各参数:
filename: 指定日志文件名
filemode: 和file函数意义相同,指定日志文件的打开模式,'w'或'a'
format: 指定输出的格式和内容,format可以输出很多有用信息,如上例所示:
%(levelno)s: 打印日志级别的数值
%(levelname)s: 打印日志级别名称
%(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
%(filename)s: 打印当前执行程序名
%(funcName)s: 打印日志的当前函数
%(lineno)d: 打印日志的当前行号
%(asctime)s: 打印日志的时间
%(thread)d: 打印线程ID
%(threadName)s: 打印线程名称
%(process)d: 打印进程ID
%(message)s: 打印日志信息
datefmt: 指定时间格式,同time.strftime()
level: 设置日志级别,默认为logging.WARNING
stream: 指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略

######              ######