Python Logging模块学习笔记
程序员文章站
2022-07-15 15:45:59
...
#Logging模块
1.日志相关概念
.日志
.日志级别level:
-不同的用户关注不同的程序信息
从低到高
- -DEBUG
- -INFO
- -NOTICE
- -WARNING警告
- -ERROE错误
- -CRITICAL
- -ALERT警告
- -EMERGENCY
-IO操作=>不要频繁操作
-LOG的作用
- -调试
- -了解软件运行状况
- -分析定位问题
-日志信息
- -time
- -where
- -level
- -content
.成熟的第三方
- -log4j
- -log4php
- -Logging
.log级别
- -级别可自定义
- -DEBUG
- -INFO
- -NOTICE
- -WARNING警告
- -ERROE错误
- -CRITICAL
- -ALERT警告
- -EMERGENCY
.初始化/写日志实例需要指定级别,只有级别高于或等于某个级别才被记录
.使用方式
- -直接使用logging模块
- -logging四大组件
- .logging模块级别的日志
-使用以下几个函数
- logging.debug(msg,*args,**kwargs) 创建一条严重级别为DEBUFG的日志记录
- logging.info(msg,*args,**kwargs) 创建一条严重级别为INFO的日志记录
- logging.warning(msg,*args,**kwargs) 创建一条严重级别为WARNING的日志记录
- logging.critical(msg,*args,**kwargs) 创建一条严重级别为CRITICAL的日志记录
- logging.log(msg,*args,**kwargs) 创建一条严重级别为LOG的日志记录
- logging.ibasicConfig(msg,*args,**kwargs) 对root logger进行一次性配置
logging.ibasicConfig(msg,*args,**kwargs) 对root logger进行一次性配置
- -只在第一次调用起作用
- -不配置logger则使用默认值:
- -输出:sys.stderr
- -级别:WARNING
- -格式:level:log_NAMEE:content
import loggging
logging.debug("thies is a debug log")
logging.info("this is a info log")
logging.warning("this is a warning log")
logging.error("this is a error log")
logging.critical("this is a critical log")
结果:只显示WARNING,ERROR,CRITICAL
加上:logging.ibasicConfig(filename="output.log",level=logging.DEBUG)
结果:都能输出到output.log文件中
可以自定义输出格式:LOG_FORMAT="%(asctime)s===%(levelname)s+++%(message)s"
- asctime %(asctime)s 日志发生的时间(可读时间)
- created %(created)f 日志发生的时间(时间戳)
- relativeCreated %(relativeCreated)d 相对logging模块加载时间
- msecs %(msecs)d 日志发生的毫秒部分
- levelname %(levelname)s 日志级别名
- levelno %(levelno)s 数字级别
- name %(name)s 所使用的日志器名称
- message %(message)s 日志记录的文本内容
- pathname %(pathname)s 调用日志源文件路径
- filename %(filename)s 文件名,包含后缀
- module %(module)s filename的名称,不包含后缀
- lineno %(lineo)s 调用日志行号
- funcName %(funcName)s filename名称部分,包含文件后缀
- process %(process)d 进程ID
- processnName %(processName)s 进程名称
- thread %(thread)d 线程ID
- threadName %(threadName)s 线程名称
logging模块处理的流程
-四大组件
- -日志器(logger):产生日志的一个接口
- -处理器(handler):把产生的日志发送到相应的目的地
- -过滤器(Filter):更精细的控制那些日志输出
- -格式器(Formatter):对输出信息进行格式化
-logger
- -产生一个日志
-
-操作:
- Logger.setLevel()设置日志器处理的日志信息的最低消息严重级别
- Logger.addHandler()和Logger.removeHandler() 为该对象添加/移除一个处理器
- Logger.addFilter()和Logger.removeFilter() 为该Loggger对象添加/移除一个过滤器
- Logger.debug():产生一个DEBUG级别的日志
.....
- -如何得到一个Logger:
- 实例化
- Logging.getLogger()
-handler
- -把Log发送到指定位置
- -方法:
- setLevel
- setFormat
- addFilter,removeFilter
- -不需要直接使用,Handler是基类
- logging.StreamHandler 将日志发送到Stream
- logging.FileHandler 将日志发送到磁盘文件
- logging.handlers.RotatingFileHandler
- logging.handlers.HTTPhandler发送给一个HTTP服务器(Get/Post)
- logging.NullHandler
-Format类
- -直接实例化
- -可以继承Format添加特殊内容
- -三个参数
- fmt:指定消息格式化字符串
- datefmt:指定日期格式字符串
- style
Filter类
- -可控制被Handler和logger使用
- -控制传递过来的消息具体内容
实例
import logging
import logging.handlers
import datetime
#定义logger
logger=logging.getLogger("mylogger")
logger.setLevel(logging.DEBUG)
#为两个不同的文件设置不同的handler
rg_handler=logging.handlers.TimedRotatingFileHandler("all.log",when='midnight',interval=1,backupCount=7,atTime=1)
rf_handler.setFormat(logging.Formatter("%(asctime)s===%(levelname)s+++%(message)s")
f_handler=logging.FileHandler('error.log')
f_handler.setLevel(logging.ERROR)
f_handler.setFormatter("%(asctime)s===%(levelname)s+++%(message)s")
#把相应的处理器组装到logger
logger.addHandler(rf_handler)
logger.addHandler(f_handler)
logger.debug('debug message')
logger.info('info message')
logger.warning('warning message')
logging.error('error message')
logging.critical('critical message')
上一篇: logging 滚动打印日志
下一篇: selenium自学之路:logging