先看一个简单的例子
-
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')
比如对于本例中的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()方法添加多个多handlerHandler.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 |
用户输出的消息 |