欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python logging日志的应用

程序员文章站 2022-07-15 08:11:00
...

@python logging日志的应用

python 实现日志的收集

  1. logging模块 实现日志收集
    1.ogging模块与Print区别:可以实现不同级别日志的输出
  2. logging模块的应用 内置模块
    1.Logger 日志器 提供一个入口,供所有的应用程序接口使用
    2.Handler 处理器 决定日志输出的位置
    3.Formator 格式器 决定日志显示的内容
    4.Filter过滤器 筛选感兴趣的内容
    关系:一个Logger日志器可以有多个处理器,每个处理器都有各自的格式器和过滤器
  3. 代码如何实现
    1.考虑日志级别
    五大级别:从低到高
    1、debug 调试信息
    2、info 关键时间描述
    3、warning 警告
    4、error 错误
    5、critical 严重

实现日志的输出

import logging
 #创建一个日志器
 logger=logging.getLogger(‘日志名称')
 #设置日志的输出最低级别 默认输出最低级别是warning
 logger.setLevel(logging.INFO)
 创建一个处理器handler 控制台进行日志输出
 console=logging.StreamHandler()
 #创建一个文件处理器
 console1 = logging.FileHandler(filename=f'{time.strftime("%Y-%m-%d-%H-%M-%S",time.localtime())}_log',encoding="utf‐8")
 #创建一个格式器(包含数据(时间 +文件名+错误信息+错误等级),并制定格式)
 console = logging.FileHandler(filename=f'{time.strftime("%Y-%m-%d-%H-%M-%S",time.localtime())}_log',encoding="utf‐8")
 #添加处理器
logger.addHandler(console)
logger.addHandler(console1)
#设置处理器格式
console.setFormatter(format_handler)
console1.setFormatter(format_handler)
#定义一个过滤器-过滤日志名为abc的日志,即名字不为abc的 不打印日志
flt = logging.Filter('abc')  
#文件处理器添加过滤器
console.addFilter(flt)
console1.addFilter(flt)
#打印日志
logger.error("这是一个错误信息")
logger.warning("这是一个warning信息")
logger.info("这是一个info信息")
logger.critical("这是一个critical信息")
logger.debug("这是一个debug信息")

实现日志的封装

import time
def getlog():
#创建一个日志器
    logger=logging.getLogger('logger')
   #设置日志的输出最低级别 默认输出最低级别是warning
    logger.setLevel(logging.INFO)
    #如果没有处理器才会添加处理器,这样避免重复调用处理器
    if not logger.handlers:
        #创建一个处理器handler 文件进行日志输出
	  	console=logging.StreamHandler()
	    console1=logging.FileHandler(filename=f'{time.strftime("%Y_%m_%d_%H_%M_%S",time.localtime())}_log',encoding="utf-8")
	    #创建一个格式器(包含数据(时间 +文件名+错误信息+错误等级),并制定格式)
	    formater=logging.Formatter(fmt='%(asctime)s %(levelname)s - %(name)s - %(filename)s (%(lineno)d): %(message)s'
	                                       ,datefmt='%Y-%m-%d %H:%M:%S')
	    logger.addHandler(fh)
	    logger.addHandler(sh)
	    console.setFormatter(formater)
	    console1.setFormatter(formater)
	    #定义一个过滤器-过滤日志名为abc的日志,即名字不为abc的 不打印日志
		flt = logging.Filter('abc')  
		#文件处理器添加过滤器
		console.addFilter(flt)
		console1.addFilter(flt)
	return logger

getlog().info("这是错误1")
getlog().error("这是错误2")

通过配置文件的方式来处理日志

新建一个配置文件 logging.conf
配置文件内容如下:

[loggers]
keys=root,applog

[handlers]
keys=fileHandler,consoleHandler

[formatters]
keys=simpleFormatter

[logger_root]
level=DEBUG
handlers=consoleHandler

[logger_applog]
level=DEBUG
handlers=fileHandler,consoleHandler
qualname=applog
propagate=0

[handler_consoleHandler]
class=StreamHandler
args=(sys.stdout,)
level=DEBUG
formatter=simpleFormatter

[handler_fileHandler]
class=handlers.TimedRotatingFileHandler
args=('applog.log', 'midnight',1,0)
level=DEBUG
formatter=simpleFormatter

[formatter_simpleFormatter]
format=%(asctime)s|%(levelname)8s|%(name)s|%(filename)s[:%(lineno)d]|%(message)s
datefmt=%Y-%m-%d %H:%M:%S

使用配置文件处理日志的代码如下:

import logging
import logging.config
#加载配置文件
logging.config.fileConfig('logging.conf')
#定义一个日志对象名为root的日志处理器
rootLogger = logging.getLogger()
rootLogger.debug("This is root Logger, debug")

#定义一个日志对象名为applog的日志处理器
logger = logging.getLogger('applog')
logger.debug("This is applog, debug")

a = 'abc'
try:
    int(a)
except Exception as e:
    # logger.error(e)
    #打印完整的报错信息
    logger.exception(e)

欢迎各学友点赞、收藏、加关注,本人将持续更新python相关内容。