默认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被忽略
###### ######