python中的日志应用
使用日志需要
import logging
日志常用分级为四个级别
debug 调试级别的日志
info 信息级别的日志
warning 警告级别的日志
error 错误级别的日志
logging.debug("this is a debug log")
loggging.inro("this is a info log")
logging.warning("this is a warning log")
logging.error("this is a error log")
会发现只打印到了warning和error这两个log。因为python默认只答应高级别的log,高于info的才被打印
可以通过配置来调整从什么级别的日志开始打印
logging.basicConfig(level=logging.DEBUG)
此时,打印就从debug级别开始。
那么日志如何输出到log文件当中呢?
LOG_FORMAT = "%(asctime)s - %(levelname)s - %(message)s" # asctime默认是年月日,十分秒毫秒格式
DATE_FORMAT = "%Y%m%d %H:%M:%S" #时间格式化,只显示到秒
logging.basicConfig(filename="my.log",level ="logging.DEBUG", format = LOG_FORMAT, dateformat = DATE_FORMAT)
logging.debug("this is a debug log")
loggging.inro("this is a info log")
logging.warning("this is a warning log")
logging.error("this is a error log")
log记录将被写入my.log日志文件中
下面通过另一种方式:日志对象 来操作记录日志
logger = logging.getLogger() #创建一个日志对象
logger.setLevel("DEBUG")
#文件处理器,日志输入到文件
file_handler = logging.FileHandler("all.log",mode='a', encoding="utf-8")
#流处理器,控制日志输入到控制台
steam_handler = logging.StreamHandler()
#错误日志单独输人到一个文件中
error_handler = logging.FileHandler("error.log", mode='a', encoding='utf-8')
error_handler.setLevel(logging.ERROR)
#将所有的处理器添加到logger中
logger.addHandler(file_handler)
logger.addHandler(steam_handler)
logger.addHandlder(error_handler)
#格式化
formatter = logging.Formatter(fmt = "%(asctime)s - %(levelname)s - %(message)s", datafmt ="%Y%m%d %H:%M:%S")
#设置格式化器,需要针对每一个处理器分别进行设置
file_handler.setFormatter(formatter)
steam_handler.setFormatter(formatter)
error_handler.setFormater(formatter)
logger.info("这是一个打印日志")laofang
logger.info("过滤器条件laofang")
logger.error("这是一个错误日志")
#过滤器,通过为某个处理器设置过滤器,实现包含条件的日志文件不被输入到该处理器中
my_filter = logging.Filter("laofang") #过滤器条件:laofang
file_handler.addFilter(my_filter) # file_handler中如果日志文件包含laofang字句,将不会被输入
# 注意上面两行过滤器的设置代码应该放在logger.addHandler(file_handler)上面,即在为日志对象添加处理器之前对处理器进行过滤器的设置。