日志相关概念
logging模块提供模块级别的函数记录日志
日志的级别(level):不同的用户关注不同的程序信息
- DEBUG
- INFO
- NOTICE
- WARING
- ERROR
- CRITICAL
- ALERT
- EMERGENCY
因为日志属于IO操作所以不要太频繁(速度太慢)
LOG的作用
- 调试
- 了解软件的运行情况
- 分析定位问题
日志信息
- time
- 地点
- level
- 内容
成熟的第三方日志
- log4j(Java)
- log4php(php)
- logging(python)
logging模块
日志级别
- DEBUG
- INFO
- WARING
- ERROR
- CRITICAL
初始化/写日志实例需要指定级别,只有当级别等于或者高于指定级别才被记录
使用方式
直接使用logging(封装了其他组件)
logging四大组件直接定义
logging模块级别的日志
函数 | 描述 |
---|---|
logging.debug(msg, *args, **kwargs) | 创建一条严重级别为DEBUG的日志记录 |
logging.info(msg, *args, **kwargs) | 创建一条严重级别为INFO的日志记录 |
logging.warning(msg, *args, **kwargs) | 创建一条严重级别为WARNING的日志记录 |
logging.error(msg, *args, **kwargs) | 创建一条严重级别为ERROR的日志记录 |
logging.critical(msg, *args, **kwargs) | 创建一条严重级别为CRITICAL的日志记录 |
logging.log(level, *args, **kwargs) | 创建一条严重级别为level的日志记录 |
logging.basicConfig(**kwargs) | 对root logger进行一次性配置(只在第一次调用时起作用) |
logging.basicConfig(**kwargs) 不配置logger则使用默认值 输出:sys.stderr(控制台)
级别:WARNING(以上包括WARNING) 格式:level:log_name:content
#配置格式例子
LOG_FORMAT = "%(asctime)s====%(levelname)s====%(message)s"
logging.basicConfig(fielname = "", level = , format = LOG_FORMAT)
常用format参数
参数 | 描述 |
---|---|
%(levelno)s | 打印日志级别的数值 |
%(levelname)s | 打印日志级别名称 |
%(pathname)s | 打印当前执行程序的路径,其实就是sys.argv[0] |
%(filename)s | 打印当前执行程序名,python如:login.py |
%(funcName)s | 打印日志的当前函数 |
%(lineno)d | 打印日志的当前行号,在第几行打印的日志 |
%(asctime)s | 打印日志的时间 |
%(thread)d | 打印线程ID |
%(threadName)s | 打印线程名称 |
%(process)d | 打印进程ID |
%(processName)d | 打印进程名称 python3.1新增 |
%(message)s | 打印日志信息 |
%(created)f | 日志发生的时间 |
%(msecs)d | 日志事件发生的毫秒部分 |
%(name)s | 所使用的日志器名称,默认是root,因为使用的是rootlogger |
%(module)s | filename的部分名称不包括后缀 |
四大组件
- 日志器(Logger):产生日志的一个借口
- 处理器(Handler):把产生的日志发送到相应的目的地
- 过滤器(Filter):更精细的控制哪些日志输出
- 格式器(Formatter):对输出的信息进行格式化
Logger
产生日志操作
操作 | |
---|---|
Logger.setLevel() | 设置日志器将会处理的日志消息的最低严重级别 |
Logger.addHandlr() 和 Logger.removeHandler() | 为logger对象添加或移除一个处理器 |
Logger.addFilter() 和 Logger.removeFilter() | 为logger对象添加或移除一个过滤器 |
Logger.debug() | 产生一条debug级别的日志,同理 info , error… |
Logger.exception() | 创建类似于Logger.error的日志消息 |
Logger.log() | 获取一个明确的日志level参数类创建一个日志记录 |
如何得到一个logger对象
实例化 logging.getLogger()
Handler
把log发送到指定位置
方法
- setlevel
- setFormat
- addFilter, removeFilter
类名 | 描述 |
---|---|
StreamHandler | 实例发送错误到流(类似文件的对象) |
FileHandler | 实例发送错误到磁盘文件 |
BaseRotatingHandler | 是所有轮徇日志的基类,不能直接使用,但是可以使用RotatingFileHandler和TimeRotatingFileHandler |
RotatingFileHandler | 实例发送信息到磁盘文件,并且限制最大的日志文件大小,并适时轮徇 |
TimeRotatingFileHandler | 实例发送错误信息到磁盘,并在适当的事件间隔进行轮徇 |
SocketHandler | 实例发送日志到TCP/IP socket |
DatagramHandler | 实例发送错误信息通过UDP协议 |
SMTPHandler | 实例发送错误信息到特定的email地址 |
SysLogHandler | 实例发送日志到UNIX syslog服务,并支持远程syslog服务 |
NTEventLogHandler | 实例发送日志到WindowsNT/2000/XP事件日志 |
MemoryHandler | 实例发送日志到内存中的缓冲区,并在达到特定条件时清空 |
HTTPHandler | 实例发送错误信息到HTTP服务器,通过GET或POST方法 |
Format类
直接实例化
可以继承Format添加特殊内容
三个参数
- fmt
- datefmt
- style
Filter类
可以被Handler和Logger使用,控制传递过来信息的具体内容