近来再弄一个小项目,已经到收尾阶段了。希望加入写log机制来增加程序出错后的判断分析。尝试使用了python logging模块。
#-*- coding:utf-8 -*-
import logging
import sys
class LogRecord(object):
def __init__(self):
self.mylogger = logging.getLogger('iplog')
self.mylogger.setLevel(logging.WARNING)
#创建一个handler,用于写入日志文件
self.fn = logging.FileHandler(sys.path[0]+'/iplog.log','a')
#定义handler的输出格式formatter
self.formatter = logging.Formatter('%(asctime)s %(levelname)s %(filename)s[line:%(lineno)d] %(message)s')
#定义handler的输出格式
self.fn.setFormatter(self.formatter)
#给mylogger添加handler
self.mylogger.addHandler(self.fn) def GetLogObj(self):
return self.mylogger
logging模块使用起来也比较简单。
logging.getLogger([name]):
返回一个logger对象,如果没有指定名字将返回root logger。
self.mylogger.setLevel(level):
指定最低的日志级别,可用的日志级别有logging.DEBUG<logging.INFO<logging.WARNING<logging.ERRO<logging.CRITICAL。
只有日志等级大于或等于设置的日志级别的日志才会被输出。
logging.FileHandle(path):
创建一个handler,用于写入日志文件.也可以创建一个StreamHandle控制台输出。还有很多Handle就大家自行进行扩展了。
logging.Formatter(*args):
定义handler的输出格式formatter。输出格式有很多。
format参数中可能用到的格式化串:
%(name)s Logger的名字
%(levelno)s 数字形式的日志级别
%(levelname)s 文本形式的日志级别
%(filename)s 调用日志输出函数的模块的文件名
%(module)s 调用日志输出函数的模块名
%(funcName)s 调用日志输出函数的函数名
%(lineno)d 调用日志输出函数的语句所在的代码行
%(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
%(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
%(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
%(message)s用户输出的消息
self.fn.setFormatter(self.formatter):
将输出格式绑定到handle上。
self.mylogger.addHandler(self.fn):
将handle绑定到mylogger对象上。
接下来就直接调用mylogger.error or debug or warning or info.....,直接输出到指定的log文件中了。但是要记得当前的self.mylogger.setLevel(logging.WARNING)是什么?只要大于或者等于WARING的日志等级才会被写入log文件中。
if status_first == -1:
self.mylogger.error("new_ipurl = %s,first download is failed!fail url save." % new_ipurl) self.failurllst.append(new_ipurl)
else:
self.mylogger.debug("new_ipurl = %s,download is success!" % new_ipurl)