前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python日志处理logging模块

Python日志处理logging模块

作者头像
用户5521279
发布2020-05-08 16:02:30
7610
发布2020-05-08 16:02:30
举报
文章被收录于专栏:搜狗测试

一、logging模块简介及快速使用

logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志文件回滚等。

优点:

  1. 可以通过设置不同的日志等级,在release版本中只输出重要信息,而不必显示大量的调试信息;
  2. 尤其是代码运行在服务器上,当出现问题时可以通过查看日志进行分析。

logging快速使用

代码语言:javascript
复制
#1. 导入Logging包
import logging 
#2. 设置配置信息
logging.basicConfig(level=logging.INFO,format='%(asctime)s-%(name)s-%(levelname)s-%(message)s') 
#3. 定义日志名称getlogger
logger = logging.getLogger("log_demo") 
#4. info,debug
logger.info("info") 
logger.debug("debug") 
logger.warning("warning") 

二、logging模块基本使用

日志输出文件

  • 设置logger名称 logger = logging.getLogger(log_name)
  • 设置log级别 logger.setLevel(logging.info)
  • 创建一个handler,用于写入日志文件 fh = logging.FileHandler(log_file)
  • 设置日志级别,默认为logging.WARNING fh.setLevel(logLevel[log_level])
  • 定义handler的输出格式 formatter = logging.Formatter('%(asctime)s %(name)s [line:%(lineno)d] %(levelname)s %(message)s') fh.setFormatter(formatter)
  • 添加handler logger.addHandler(fh)
  • format %(levelno)s: 打印日志级别的数值 %(levelname)s: 打印日志级别名称 %(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0] %(filename)s: 打印当前执行程序名 %(funcName)s: 打印日志的当前函数 %(lineno)d: 打印日志的当前行号 %(asctime)s: 打印日志的时间 %(thread)d: 打印线程ID %(threadName)s: 打印线程名称 %(process)d: 打印进程ID %(message)s: 打印日志信息
  • 代码
代码语言:javascript
复制
import logging 
#1. 设置logger名称
logger = logging.getLogger("log_file_demo") 
#2. 设置log级别logger.setLevel(logging.INFO) 
#3. 创建handler
fh_stream = logging.StreamHandler() 
# 写入文件
fh_file = logging.FileHandler("./test.log") 
#4. 设置日志级别
fh_stream.setLevel(logging.DEBUG) 
fh_file.setLevel(logging.WARNING) 
#5. 定义输出格式
formatter = logging.Formatter('%(asctime)s %(name)s %(levelname)s %(message)s ') 
fh_stream.setFormatter(formatter) 
fh_file.setFormatter(formatter) 
#6. 添加handler
logger.addHandler(fh_stream) 
logger.addHandler(fh_file) 
#7. 运行输出
logger.info("This is a info") 
logger.debug("This is a debug") 
logger.warning("This is a warning") 

三、将日志进行封装

代码语言:javascript
复制
import logging 
from config import Conf 
import datetime,os 
from config.Conf import ConfigYaml 
#定义日志级别的映射
log_l = {         
    "info": logging.INFO,          
    "debug": logging.DEBUG,          
    "warning": logging.WARNING,  
    "error": logging.ERROR }
#1. 创建类
class Logger: 
#2. 定义参数   
     #输出文件名称,Loggername,日志级别     
     def __init__(self,log_file,log_name,log_level):
         self.log_file = log_file #扩展名 配置文件            
         self.log_name = log_name #参数            
         self.log_level = log_level #配置文件
#3. 编写输出控制台或文件            
         # 设置logger名称
         self.logger = logging.getLogger(self.log_name)             
         # 设置log级别             
         self.logger.setLevel(log_l[self.log_level]) #logging.INFO             
         #判断handlers是否存在             
         if not self.logger.handlers:                     
             # 输出控制台                     
             fh_stream = logging.StreamHandler()                      
             fh_stream.setLevel(log_l[self.log_level])                      
             formatter = logging.Formatter('%(asctime)s %(name)s %(levelname)s %(message)s ')  
             fh_stream.setFormatter(formatter)                     
             # 写入文件                     
             fh_file = logging.FileHandler(self.log_file)                      
             fh_file.setLevel(log_l[self.log_level])                      
             fh_file.setFormatter(formatter)                     
             # 添加handler                     
             self.logger.addHandler(fh_stream)                      
             self.logger.addHandler(fh_file) 
#4. 初始化参数数据
#日志文件名称,日志文件级别
#日志文件名称 = logs目录 + 当前时间+扩展名
#log目录
log_path = Conf.get_log_path() 
#当前时间
current_time = datetime.datetime.now().strftime("%Y-%m-%d") 
#扩展名
log_extension = ConfigYaml().get_conf_log_extension() 
logfile = os.path.join(log_path,current_time+log_extension) 
#print(logfile) 
#日志文件级别
loglevel = ConfigYaml().get_conf_log() 
#print(loglevel) 
#5. 对外方法,初始log工具类,提供其它类使用
def my_log(log_name = __file__):          
    return Logger(log_file=logfile,log_name=log_name,log_level=loglevel).logger         

if __name__ == "__main__":          
    my_log().debug("This is a debug")     
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 搜狗测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
日志服务
日志服务(Cloud Log Service,CLS)是腾讯云提供的一站式日志服务平台,提供了从日志采集、日志存储到日志检索,图表分析、监控告警、日志投递等多项服务,协助用户通过日志来解决业务运维、服务监控、日志审计等场景问题。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档