logging模块与log4j的机制是一样的,只是具体的实现细节不同。模块提供logger,handler,filter,formatter四个主要组件。
logger:提供日志接口,供应用代码使用。logger最长用的操作有两类:配置和发送日志消息。可以通过 logging.getLogger(name)获取logger对象,如果不指定name则返回root对象,多次使用相同的name调用 getLogger方法返回同一个logger对象。
handler:将日志记录(log record)发送到合适的目的地(destination),比如文件,socket等。一个logger对象可以通过addHandler方法添加0 到多个handler,每个handler又可以定义不同日志级别,以实现日志分级过滤显示。
filter:提供一种优雅的方式决定一个日志记录是否发送到handler。
formatter:指定日志记录输出的具体格式。formatter的构造方法需要两个参数:消息的格式字符串和日期字符串,这两个参数都是可选的。
在记录日志时, 日志消息都会关联一个级别,系统默认提供了6个级别,它们分别是:CRITICAL、ERROR、WARNING、INFO、DEBU、NOTSET。他们的大小关系为:CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET。所以可以给日志对象设置日志级别,低于该级别的日志消息将会被忽略,也可以给Hanlder设置日志级别,对于低于该级别的日志消息, Handler也会忽略。
logging.getLogger([name])
创建Logger对象,如果没有指定name,返回root logger。只要name相同,返回的logger实例都是同一个而且只有一个,即name和logger实例是一一对应的。日志记录的工作主要由Logger对象来完成。在调用getLogger时要提供Logger的名称(注:多次使用相同名称来调用getLogger,返回的是同一个对象的引用。),Logger实例之间有层次关系,这些关系通过Logger名称来体现。
Logger对像有如下常用的方法和属性:
Logger.setLevel(lvl):设置日志的级别。对于低于该级别的日志消息将被忽略。Logger.debug(msg [ ,*args [, **kwargs]]):设置日志消息Logger.info(msg[ , *args[ , **kwargs] ] )Logger.warnning(msg[ , *args[ , **kwargs] ] )Logger.error(msg[ , *args[ , **kwargs] ] )Logger.critical(msg[ , *args[ , **kwargs] ] )logging.basicConfig([**kwargs])
该函数对日志的输出格式及方式做相关配置,kwargs 支持如下几个关键字参数: filename:日志文件的保存路径。如果配置了些参数,将自动创建一个FileHandler作为Handler; filemode:日志文件的打开模式。 默认值为'a',表示日志消息以追加的形式添加到日志文件中。如果设为'w', 那么每次程序启动的时候都会创建一个新的日志文件; format:设置日志输出格式; datefmt:定义日期格式; level:设置日志的级别.对低于该级别的日志消息将被忽略; stream:设置特定的流用于初始化StreamHandler;
logging.basicConfig(level=logging.WARN, format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', datefmt='%a, %d %b %Y %H:%M:%S', filename='myapp.log', filemode='w')logging.debug('debug') #被忽略 logging.info('info') #被忽略 logging.warning('warn') #被记录logging.error('error') #被记录logging.getLevelName(lvl)
通过数字获取日志级别对应的名称logging.shutdown()
当不再使用日志系统的时候,调用该方法,它会将日志flush到对应的目标域上。一般在系统退出的时候调用。
Logger.addHandler(hdlr)
logger可以雇佣handler来帮它处理日志, handler主要有以下几种: StreamHandler: 输出到控制台 FileHandler: 输出到文件
由于StreamHandler和FileHandler是常用的日志处理方式,所以直接包含在logging模块中,而其他方式则包含在logging.handlers模块中,
logging的几种handle方式如下: logging.handlers.BaseRotatingHandler logging.handlers.RotatingFileHandler logging.handlers.TimedRotatingFileHandler logging.handlers.SocketHandler: 远程输出日志到TCP/IP sockets logging.handlers.DatagramHandler: 远程输出日志到UDP sockets logging.handlers.SMTPHandler: 远程输出日志到邮件地址 logging.handlers.SysLogHandler: 日志输出到syslog logging.handlers.NTEventLogHandler: 远程输出日志到Windows NT/2000/XP的事件日志 logging.handlers.MemoryHandler: 日志输出到内存中的制定buffer logging.handlers.HTTPHandler: 通过"GET"或"POST"远程输出到HTTP服务器 参考:http://docs.python.org/2/library/logging.html