首页 > 代码库 > python 学习笔记 -logging模块(日志)
python 学习笔记 -logging模块(日志)
模块级函数
logging.getLogger([name]):返回一个logger对象,如果没有指定名字将返回root logger
logging.debug()、logging.info()、logging.warning()、logging.error()、logging.critical():设定root logger的日志级别
logging.basicConfig():用默认Formatter为日志系统建立一个StreamHandler,设置基础配置并加到root logger中
日志级别
logging.basicConfig():用默认Formatter为日志系统建立一个StreamHandler,设置基础配置并加到root logger中
import loggingimport sysLEVELS = {‘debug‘: logging.DEBUG, ‘info‘: logging.INFO, ‘warning‘: logging.WARNING, ‘error‘: logging.ERROR, ‘critical‘: logging.CRITICAL}if len(sys.argv) > 1: level_name = sys.argv[1] level = LEVELS.get(level_name, logging.NOTSET) logging.basicConfig(level=level)logging.debug(‘This is a debug message‘)logging.info(‘This is an info message‘)logging.warning(‘This is a warning message‘)logging.error(‘This is an error message‘)logging.critical(‘This is a critical error message‘)
$ python logging_level_example.py debugDEBUG:root:This is a debug messageINFO:root:This is an info messageWARNING:root:This is a warning messageERROR:root:This is an error messageCRITICAL:root:This is a critical error message$ python logging_level_example.py infoINFO:root:This is an info messageWARNING:root:This is a warning messageERROR:root:This is an error messageCRITICAL:root:This is a critical error message
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 | 用户输出的消息
|
最后封装成一个类:
# -*- coding: utf-8 -*-import loggingclass Logger(): def __init__(self, logname, loglevel, logger): ‘‘‘ 指定保存日志的文件路径,日志级别,以及调用文件 将日志存入到指定的文件中 ‘‘‘ format_dict = { 1: logging.Formatter(‘%(asctime)s - %(module)s- %(name)s - %(levelname)s - %(message)s‘), 2: logging.Formatter(‘%(asctime)s - %(module)s- %(name)s - %(levelname)s - %(message)s‘), 3: logging.Formatter(‘%(asctime)s - %(name)s - %(module)s- %(levelname)s - %(message)s‘), 4: logging.Formatter(‘%(asctime)s - %(name)s - %(module)s- %(levelname)s - %(message)s‘), 5: logging.Formatter(‘%(asctime)s - %(name)s - %(module)s- %(levelname)s - %(message)s‘) } # 创建一个logger self.logger = logging.getLogger(logger) self.logger.setLevel(logging.DEBUG) # 创建一个handler,用于写入日志文件 fh = logging.FileHandler(logname) fh.setLevel(logging.DEBUG) # 再创建一个handler,用于输出到控制台 ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) # 定义handler的输出格式 # formatter = logging.Formatter(‘%(asctime)s - %(name)s - %(levelname)s - %(message)s‘) formatter = format_dict[int(loglevel)] fh.setFormatter(formatter) ch.setFormatter(formatter) # 给logger添加handler self.logger.addHandler(fh) self.logger.addHandler(ch) def getlog(self): return self.logger
python 学习笔记 -logging模块(日志)