logging是Python中一个负责记录、输出以及管理日志信息的模块。当然开发者可以自己实现信息与日志的输出与保存,但是logging是推荐的方法,因为它的功能十分强大,而且具有良好的易用性和扩展性。
先看一个简单的例子
-
import logging
-
-
#create logger
-
mylogger = logging.getLogger('all')
-
mylogger.setLevel(logging.DEBUG)
-
-
# 这里可以指定日志文件的方式,默认是追加
-
# logging.FileHandler(filename, mode='a', encoding=None, delay=False)
-
handler = logging.FileHandler('debug.log')
-
e_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
-
handler.setFormatter(e_formatter)
-
mylogger.addHandler(handler)
-
-
#add a new handler - critical
-
handler = logging.StreamHandler()
-
b_formatter = logging.Formatter('%(asctime)s - %(message)s')
-
handler.setFormatter(b_formatter)
-
handler.setLevel(logging.CRITICAL)
-
mylogger.addHandler(handler)
-
-
#add a new handler - error
-
handler = logging.FileHandler('error.log')
-
handler.setFormatter(e_formatter)
-
handler.setLevel(logging.ERROR)
-
mylogger.addHandler(handler)
-
-
mylogger.debug('This is a debug message')
-
mylogger.info('This is an info message')
-
mylogger.warning('This is a warning message')
-
mylogger.error('This is an error message')
-
mylogger.critical('This is a critical error message')
在这个例子里,创建了两个filehandler和一个streamhandler,他们的级别是不同的,只有log级别高于等于handler级别的log,才会真正输出到这个handler。
比如对于本例中的streamhandler,只有critical的log才会对用户输出;而对于DEBUG级别的handler“debug.log”,所有的的log都会写入到这个文件
Loggers
Logger.setLevel(lel):指定最低的日志级别,低于lel的级别将被忽略。debug是最低的内置级别,critical为最高
Logger.addFilter(filt)、Logger.removeFilter(filt):添加或删除指定的filter
Logger.addHandler(hdlr)、Logger.removeHandler(hdlr):增加或删除指定的handler
Logger.debug()、Logger.info()、Logger.warning()、Logger.error()、Logger.critical():可以设置的日志级别
Handlers
handler对象负责发送相关的信息到指定目的地。可以通过addHandler()方法添加多个多handler
Handler.setLevel(lel):指定被处理的信息级别,低于lel级别的信息将被忽略
Handler.setFormatter():给这个handler选择一个格式
Handler.addFilter(filt)、Handler.removeFilter(filt):新增或删除一个filter对象
Formatters
Formatter对象设置日志信息最后的规则、结构和内容,默认的时间格式为%Y-%m-%d %H:%M:%S,下面是Formatter常用的一些信息
%(name)s
|
Logger的名字
|
%(levelno)s
|
数字形式的日志级别
|
%(levelname)s
|
文本形式的日志级别
|
%(pathname)s
|
调用日志输出函数的模块的完整路径名,可能没有
|
%(filename)s
|
调用日志输出函数的模块的文件名
|
%(module)s
|
调用日志输出函数的模块名
|
%(funcName)s
|
调用日志输出函数的函数名
|
%(lineno)d
|
调用日志输出函数的语句所在的代码行
|
%(created)f
|
当前时间,用UNIX标准的表示时间的浮 点数表示
|
%(relativeCreated)d
|
输出日志信息时的,自Logger创建以 来的毫秒数
|
%(asctime)s
|
字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
|
%(thread)d
|
线程ID。可能没有
|
%(threadName)s
|
线程名。可能没有
|
%(process)d
|
进程ID。可能没有
|
%(message)s
|
用户输出的消息
|
阅读(2203) | 评论(0) | 转发(0) |