日志
日志是跟踪软件运行时所发生的事件的一种方法。软件开发者在代码中调用日志函数,表明发生了特定的事件。事件由描述性消息描述,该描述性消息可以可选地包含可变数据(即,对于事件的每次出现都潜在地不同的数据)。事件还具有开发者归因于事件的重要性;重要性也可以称为级别或严重性。
logging日志等级
logging模块默认定义了以下五种日志等级:
- DEBUG
最详细日志信息, 多用于问题诊断 - INFO
仅次于DEBUG, 多用于记录关键点信息, 确保程序按预期执行 - WARNING
低等级故障, 但程序仍能运行, 如磁盘空间不足警告 - ERROR
由于比WARNING严重的问题, 导致某些功能不能正常运行 - CRITICAL
严重错误, 导致应用程序不能继续运行
默认等级是WARNING,即仅仅这个等级及以上的才会反馈信息,DEBUG和INFO均不会被反馈。
常用函数
- logging.debug(msg)
logging.info(msg)
logging.warning(msg)
logging.error(msg)
logging.critical(msg)
上述五个函数可分别设置其对应级别的日志信息内容
msg--字符串格式,内容即输出日志信息 - logging.basicConfig(**kwargs)
为日志模块配置基本信息。设置后可以直接使用logging来打印日志,其常用关键字参数如下:- filename: 日志文件的保存路径。如果配置了该参数,将自动创建一个FileHandler作为Handler;
- filemode: 日志文件的打开模式。 默认值为’a’,表示日志消息以追加的形式添加到日志文件中。如果设为’w’, 那么每次程序启动的时候都会创建一个新的日志文件;
- datefmt: 指定时间格式,同time.strftime()
- level: 设置日志级别,默认为logging.WARNING
- stream: 设置特定的流用于初始化StreamHandler;指定日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略
- format: 指定输出的格式和内容
format参数中可能用到的格式化串如下:
%(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 用户输出的消息
- logging.getLogger([name])
创建Logger对象。日志记录的工作主要由Logger对象来完成。在调用getLogger时要提供Logger的名称(使用相同名称来调用getLogger,返回的是同一个对象的引用。),Logger实例之间有层次关系,这些关系通过Logger名称来体现,如:
p = logging.getLogger(“root”)
c1 = logging.getLogger(“root.c1”)
c2 = logging.getLogger(“root.c2”)
例子中,p是父logger, c1,c2分别是p的子logger。c1, c2将继承p的设置。如果省略了name参数, getLogger将返回日志对象层次关系中的根Logger。 - logging.StreamHandler
- logging.FileHandler
- logging.Formatter