Python日志处理logging模块

2020/04/27 10:00
阅读数 639
AI总结
 

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

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

优点:

  1. 可以通过设置不同的日志等级,在release版本中只输出重要信息,而不必显示大量的调试信息;

  2. 尤其是代码运行在服务器上,当出现问题时可以通过查看日志进行分析。

logging快速使用

#1. 导入Logging包import logging #2. 设置配置信息logging.basicConfig(level=logging.INFO,format='%(asctime)s-%(name)s-%(levelname)s-%(message)s'#3. 定义日志名称getloggerlogger = logging.getLogger("log_demo"#4. info,debuglogger.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打印日志信息

  • 代码

import logging #1. 设置logger名称logger = logging.getLogger("log_file_demo"#2. 设置log级别logger.setLevel(logging.INFO) #3. 创建handlerfh_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. 添加handlerlogger.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"
 

三、将日志进行封装

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")     



本文分享自微信公众号 - 搜狗测试(SogouQA)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
AI总结
返回顶部
顶部