本篇文章给大家带来的内容是关于Python中logging日志模块的解析(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
一、日志记录的级别
-
debug:优先级10,记录调试的详细信息,只在调试时开启
-
info:优先级20,记录普通的消息,报告错误和警告等待。
-
warning:优先级30,记录相关的警告信息。
-
error:优先级40,记录错误信息、程序崩溃
-
critical:优先级50,记录错误信息
如果不设置,默认为iwarning
二、logging模块的主要结构
查看logging的源码,可知主要有四个类实现功能:
-
Loggers:提供应该程序直接使用的接口,如相关的配置设置
-
Handlers:将Loggers产生的日志传到指定位置,设置日志保存的位置;
-
Filters:对输出日志进行过滤操作;
-
Formatters:控制日志的输出格式
Formatters
Formatters对象定义了日志的输出格式,有多种可选参数。
参数 | 含义 |
---|---|
%(name)s | Logger的名字 |
%(levellno)s | 数字形式的日志级别 |
%(levelname)s | 文本形式的日志级别 |
%(pathname)s | 调用日志输出函数的模块的完整路径名,可能没有 |
%(filename)s | 调用日志输出函数的模块的文件名 |
%(module)s | 调用日志输出函数的模块名 |
%(funcName)s | 调用日志输出函数的函数名 |
%(lineno)d | 调用日志输出函数的语句所在的代码行 |
%(created)f | 当前时间,用unix标表示的时间浮点表示 |
%(relativeCreated)d | 输出日志信息时,自Logger创建以来的毫秒数 |
%(asctime)s | 字符串形式的当前时间,默认格式是‘2018-11-22 16:49:45,896’,逗号后面是毫秒 |
%(thread)d | 线程ID,可能没有 |
%(threadName)s | 线程名,可能没有 |
%(process)d | 进程ID,可能没有 |
%(message)s | 用户输出的信息 |
实例:
import logging#fmt:定义输出的日志信息的格式#datefmt:定义时间信息的格式,默认为:%Y-%m-%d %H:%M:%S#style:定义格式化输出的占位符,默认是%(name)格式,可选{}或$格式formatter=logging.Formatter(fmt='%(asctime)s %(levelname)s: %(message)s' ,datefmt='%Y-%m-%d %H:%M:%S',style='%')
Handlers日志处理器
日志处理器用来处理日志的具体流向,是输出到文件中还是标准输出等,它通过设置Formatter控制输出格式,添加filters过滤日志。
常用的处理器有两种
-
StreamHandler:用于向控制台打印日志
-
FileHandler:用于向日志文件打印日志
其它的处理器
名称 | 详细位置 | 说明 |
---|---|---|
RotatingHandler | logging.handlers.RotatingHandler | 日志回滚方式,支持日志文件最大数量和日志文件回滚 |
TimeRotatingHandler | logging.handlers.TimeRotatingHandler | 日志回滚方式,在一定时间区域内回滚日志文件 |
SocketHandler | logging.handlers.SocketHandler | 远程输出日志到TCP/IP sockets |
DatagramHandler | logging.handlers.DatagramHandler | 远程输出日志到UDP sockets |
SMTPHandler | logging.handlers.SMTPHandler | 远程输出日志到邮件地址 |
SysLogHandler | logging.handlers.SysLogHandler | 日志输出到syslog |
NTEventLogHandler | logging.handlers.NTEventLogHandler | 远程输出日志到Windows NT/2000/xp的事件日志 |
MemoryHandler | logging.handlers.Memo本文来源gaodaimacom搞#^代%!码&网*ryHandler | 日志输出到内存中的指定buffer |
HTTPHandler | logging.handlers.HTTPHandler | 通过“GET”或者“POST”远程输出到HTTP服务器 |
from logging import Handler#所有日志处理器的父类handler=Handler()print('处理日志的等级:',handler.level)print('处理日志的名字:',handler.name)print('处理器的日志过滤器::',handler.filters)print('日志的格式::',handler.filters)#一些常用方法:handler.get_name()handler.set_name('')handler.createLock()#创建线程锁handler.acquire()#获取线程锁handler.release()#释放线程锁handler.setLevel('info') #设置日志处理器的记录级别handler.setFormatter(fmt='')#设置日志的输出格式handler.addFilter('')#往处理器中添加过滤器handler.removeFilter('')#往处理器中移除过滤器handler.emit('')#日志记录的处理逻辑,由子类实现