日志操作

Python中有一个标准库模块logging可以直接记录日志--------logging模块
 
 
基本用法
import logging
logging.debug("这是一条调试信息")
logging.info("这是一条普通信息")
logging.warning("这是一条警告信息")
logging.error("这是一条错误信息")
logging.critical("这是一条严重错误信息")
 
 
设置日志级别
logging中默认的日志级别为WARNING,程序中大于等于该级别的日志才能输出,小于该级别的
日志不会被打印出来。
 
logging.basicConfig(level=logging.DEBUG)
 
 
如何选择日志级别
 
在开发环境和测试环境中,为了尽可能详细的查看程序的运行状态来保证上线后的稳定性,可
以使用DEBUGINFO级别的日志获取详细的日志信息,这是非常耗费机器性能的。
在生产环境中,通常只记录程序的异常信息、错误信息等(设置成WARNINGERROR
别),这样既可以减小服务器的I/O压力,也可以提高获取错误日志信息的效率和方便问题的
排查。
 
设置日志格式
logging.basicConfig(format="%(levelname)s:%(name)s:%(message)s")
 
 
自定义日志格式:
 

 

 代码:

importlogging
fmt='%(asctime)s%(levelname)s[%(name)s][%(filename)s(%(funcName)s:%(lineno)d)]-%
(message)s'
logging.basicConfig(level=logging.INFO,format=fmt)
logging.debug("调试")
logging.info("信息")
logging.warning("警告")
logging.error("错误")
 
 
 
 
将日志信息输出到文件中:
默认情况下Pythonlogging模块将日志打印到了标准输出中(控制台)
logging.basicConfig(filename="a.log")
代码:
importlogging
fmt='%(asctime)s%(levelname)s[%(name)s][%(filename)s(%(funcName)s:%(lineno)d)]-%
(message)s'
logging.basicConfig(filename="a.log",level=logging.INFO,format=fmt)
logging.debug("调试")
logging.info("信息")
logging.warning("警告")
logging.error("错误")
 
 
 
logging日志模块四大组件
 
 日志器  logger   :  是程序的入口,主要用来记录日志的信息
处理器 handler : 决定了日志的输出目的地
格式器 formatter :决定了日志的输出格式
过滤器 filter: 决定哪些日志信息被输出,哪些被丢弃

logging模块就是通过这些组件来完成日志处理的
简单点说就是:日志器(logger)是入口,真正干活儿的是处理器(handler),处理器(handler)还可以通过过滤器(filter)和格式器(formatter)对要输出的日志内容做过滤和格式化等处理操作。
 
日志器:
Logger对象的任务:
向程序暴露记录日志的方法
基于日志级别或Filter对象来决定要对哪些日志进行后续处理
将日志消息传送给所有感兴趣的日志handlers
 
 创建日志对象
logger = logging.getLogger()
logger = logging.getLogger("myLogger")
 
logging.getLogger()方法有一个可选参数name,该参数表示将要返回的日志器的名称标识,如果不提供该参数,则返回root日志器对象。 若以相同的name参数值多次调用getLogger()方法,将会
返回指向同一个logger对象的引用。

 

 

处理器

Handler类
Handler对象的作用是将消息分发到handler指定的位置,比如:控制台、文件、网络、邮件等。Logger对象可以通过addHandler()方法为自己添加多个handler对象。
 
如何创建Handler对象
 
在程序中不应该直接实例化和使用Handler实例,因为Handler是一个基类,它只定义了Handler应该有的接口。 应该使用Handler实现类来创建对象,logging中内置的常用的Handler包括:
 
 

 

 

 
Handler常用的方法:
创建日志器
logger = logging.getLogger()
设置日志器的级别
logger.setLevel(logging.INFO)
将格式器添加到处理器中
handler.setFormatter(formatter)
 

 

 

 
 
格式器
 
Formatter类
Formatter对象用于配置日志信息的格式
 
创建ormatter对象:
formatter = logging.Formatter(fmt=None, datefmt=None, style='%')
fmt:指定消息格式化字符串,如果不指定该参数则默认使用message的原始值
datefmt:指定日期格式字符串,如果不指定该参数则默认使用"%Y-%m-%d %H:%M:%S"
style:Python 3.2新增的参数,可取值为 '%', '{'和 '$',如果不指定该参数则默认使用'%'
 
 
 
 
 
整体实现步骤:
 
 
实现步骤分析
1.创建日志器对象
2.创建控制台处理器对象
3.创建文件处理器对象
4.创建格式化器对象
5.把格式化器添加到处理器中
6.把处理器添加到日志器中
 
 
 
定义日志格式
 
fmt = '%(asctime)s %(levelname)s [%(name)s] [%(filename)s(%(funcName)s:%(lineno)d)] - %(message)s'
formatter = logging.Formatter(fmt)
 
把日志输出到控制台
 
logger = logging.getLogger()
sh = logging.StreamHandler()
sh.setFormatter(formatter)
logger.addHandler(sh)
 
把日志输出到文件中
 
fh = logging.FileHandler("./b.log")
fh.setFormatter(formatter)
logger.addHandler(fh)
 
 
 
fh = logging.handlers.TimedRotatingFileHandler(filename, when='h', interval=1, backupCount=0)   将日志信息记录到文件中,以特定的时间间隔切换日志文件。
filename: 日志文件名
when: 时间单位,可选参数
S - Seconds
M - Minutes
H - Hours
D - Days
midnight - roll over at midnight
W{0-6} - roll over on a certain day; 0 - Monday
interval: 时间间隔
backupCount: 日志文件备份数量。如果backupCount大于0,那么当生成新的日志文件时,将只保留backupCount个文件,删除最老的文件。
 
 
 
范例代码:
 
import logging

# 先创建日志器
logger = logging.getLogger()

# 再设置日志器的级别
logger.setLevel(logging.INFO)

# 再创建处理器
handler = logging.StreamHandler()

# 再设置处理器的级别
handler.setLevel(logging.INFO)

# 创建格式器

# 确立文件输出格式
fmt = '%(asctime)s %(levelname)s [%(name)s] [%(filename)s(%(funcName)s:%(lineno)d)] - %(message)s'
formatter = logging.Formatter(fmt=fmt)

# 将格式器添加到处理器中
handler.setFormatter(formatter)

# 将处理器添加到日志器
logger.addHandler(handler)

# 输出日志信息
logger.info("这是一个普通的信息")
posted @ 2022-08-06 16:00  一影惊孤鸿  阅读(124)  评论(0)    收藏  举报