python操作日志的封装方法(两种方法)


Posted in Python onMay 23, 2019

前言

今天就简单的对日志做个封装,实际工作中直接拿去用吧

方法1

"""
------------------------------------
@Time : 2019/5/22 8:12
@Auth : linux超
@File : logfile.py
@IDE : PyCharm
@Motto: Real warriors,dare to face the bleak warning,dare to face the incisive error!
------------------------------------
"""
import logging
class Log(object):
 def __init__(self, name=__name__, path='mylog.log', level='DEBUG'):
  self.__name = name
  self.__path = path
  self.__level = level
  self.__logger = logging.getLogger(self.__name)
  self.__logger.setLevel(self.__level)
 def __ini_handler(self):
  """初始化handler"""
  stream_handler = logging.StreamHandler()
  file_handler = logging.FileHandler(self.__path, encoding='utf-8')
  return stream_handler, file_handler
 def __set_handler(self, stream_handler, file_handler, level='DEBUG'):
  """设置handler级别并添加到logger收集器"""
  stream_handler.setLevel(level)
  file_handler.setLevel(level)
  self.__logger.addHandler(stream_handler)
  self.__logger.addHandler(file_handler)
 def __set_formatter(self, stream_handler, file_handler):
  """设置日志输出格式"""
  formatter = logging.Formatter('%(asctime)s-%(name)s-%(filename)s-[line:%(lineno)d]'
          '-%(levelname)s-[日志信息]: %(message)s',
          datefmt='%a, %d %b %Y %H:%M:%S')
  stream_handler.setFormatter(formatter)
  file_handler.setFormatter(formatter)
 def __close_handler(self, stream_handler, file_handler):
  """关闭handler"""
  stream_handler.close()
  file_handler.close()
 @property
 def Logger(self):
  """构造收集器,返回looger"""
  stream_handler, file_handler = self.__ini_handler()
  self.__set_handler(stream_handler, file_handler)
  self.__set_formatter(stream_handler, file_handler)
  self.__close_handler(stream_handler, file_handler)
  return self.__logger
if __name__ == '__main__':
 log = Log(__name__, 'file.log')
 logger = log.Logger
 logger.debug('I am a debug message')
 logger.info('I am a info message')
 logger.warning('I am a warning message')
 logger.error('I am a error message')
 logger.critical('I am a critical message')

初始化方法参数说明

name:自定义日志的名字, 默认是root, 但是我这里是使用调用文件的__name__ 作为默认名字

path:生成的日志的文件名

level:日志的级别,我这里把所有的级别都默认设置了level=DEBUG

方法2

使用logging.fileconfig这个模块实现(不知道这个模块的找度娘恶补一下把)

1.使用配置文件构造日志配置信息

logger.ini

[loggers]
keys = root, example01, example02
[logger_root]
level = DEBUG
handlers = hand01, hand02
[logger_example01]
handlers = hand01, hand02
qualname = example01
propagate = 0
[logger_example02]
handlers = hand01, hand03
qualname = example02
propagate = 0
[handlers]
keys = hand01, hand02, hand03
[handler_hand01]
class = StreamHandler
level = INFO
formatter = form01
args=(sys.stdout, )
[handler_hand02]
class = FileHandler
level = DEBUG
formatter = form01
args = ('log/test_case_log.log', 'a')
[handler_hand03]
class = handlers.RotatingFileHandler
level = INFO
formatter = form01
args = ('log/test_case_log.log', 'a', 10*1024*1024,3)
[formatters]
keys = form01, form02
[formatter_form01]
format = %(asctime)s-%(filename)s-[line:%(lineno)d]-%(levelname)s-[LogInfoMessage]: %(message)s
datefmt = %a, %d %b %Y %H:%M:%S
[formatter_form02]
format = %(name)-12s: %(levelname)-8s-[日志信息]: %(message)s
datefmt = %a, %d %b %Y %H:%M:%S

封装python代码

"""
------------------------------------
@Time : 2019/5/22 9:37
@Auth : linux超
@File : Log.py
@IDE : PyCharm
@Motto: Real warriors,dare to face the bleak warning,dare to face the incisive error!
------------------------------------
"""
import logging
from logging import config
class MyLog(object):
 def __init__(self):
  config.fileConfig('logger.ini')
  self.logger = logging.getLogger('example01')
 @property
 def my_logger(self):
  return self.logger
if __name__ == '__main__':
 log = MyLog()
 log.my_logger.info('it is my test log message info')

总结

两种方法各有好处吧

第一种代码很好理解思路清晰 , 但是不利于项目都维护,比如日志文件名,日志格式等无法修改,只能通过代码内部修改

第二种其实是使用config模块内部使用配置文件操作模块ConfigParser做了封装, 用配置文件来构造自定义日志器,好处很明显,我们只要通过修改配置文件就能修改日志的格式,名字,级别等等一些设置,无需改动代码,而且使用很简单, 其实这种方法完全不需要封装一个python代码,哪个模块需要输出日志,直接调用config模块获得logger就可以了(就是上面文件的那几行代码),今天就到这吧......

以上所述是小编给大家介绍的python操作日志的封装方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python解决字典中的值是列表问题的方法
Mar 04 Python
python迭代器的使用方法实例
Nov 21 Python
python的描述符(descriptor)、装饰器(property)造成的一个无限递归问题分享
Jul 09 Python
python使用win32com库播放mp3文件的方法
May 30 Python
Python 异常处理的实例详解
Sep 11 Python
python中文分词教程之前向最大正向匹配算法详解
Nov 02 Python
对python的bytes类型数据split分割切片方法
Dec 04 Python
对python多线程中Lock()与RLock()锁详解
Jan 11 Python
Python开发之Nginx+uWSGI+virtualenv多项目部署教程
May 13 Python
python Pandas库基础分析之时间序列的处理详解
Jul 13 Python
超级实用的8个Python列表技巧
Aug 24 Python
如何使用Python实现一个简易的ORM模型
May 12 Python
Python除法之传统除法、Floor除法及真除法实例详解
May 23 #Python
详解Python3除法之真除法、截断除法和下取整对比
May 23 #Python
python实现远程控制电脑
May 23 #Python
python日志logging模块使用方法分析
May 23 #Python
Django框架模板语言实例小结【变量,标签,过滤器,继承,html转义】
May 23 #Python
Django框架模板文件使用及模板文件加载顺序分析
May 23 #Python
Django框架登录加上验证码校验实现验证功能示例
May 23 #Python
You might like
用ODBC的分页显示
2006/10/09 PHP
php写入文件不覆盖的实例讲解
2019/09/17 PHP
phpstorm激活码2020附使用详细教程
2020/09/25 PHP
javascript 用原型继承来实现对象系统
2010/03/22 Javascript
一次失败的jQuery优化尝试小结
2011/02/06 Javascript
jquery 选择器引擎sizzle浅析
2013/02/06 Javascript
获取非最后一列td值并将title设为该值的方法
2013/10/30 Javascript
jquery.Ajax()方法调用Asp.Net后台的方法解析
2014/02/13 Javascript
js实现同一个页面多个渐变效果的方法
2015/04/10 Javascript
bootstrap-treeview自定义双击事件实现方法
2016/01/09 Javascript
第一次接触神奇的Bootstrap表单
2016/07/27 Javascript
jquery easyui DataGrid简单示例
2017/01/23 Javascript
vue加载自定义的js文件方法
2018/03/13 Javascript
如何在 JavaScript 中更好地利用数组
2018/09/27 Javascript
Javascript读写cookie的实例源码
2019/03/16 Javascript
Javascript 模拟mvc实现点餐程序案例详解
2020/12/24 Javascript
[02:56]DOTA2亚洲邀请赛 VG出场战队巡礼
2015/02/07 DOTA
在python的WEB框架Flask中使用多个配置文件的解决方法
2014/04/18 Python
以911新闻为例演示Python实现数据可视化的教程
2015/04/23 Python
深入理解python中的浅拷贝和深拷贝
2016/05/30 Python
python多进程读图提取特征存npy
2019/05/21 Python
Python3内置模块pprint让打印比print更美观详解
2019/06/02 Python
pytorch实现从本地加载 .pth 格式模型
2020/02/14 Python
Python进程的通信Queue、Pipe实例分析
2020/03/30 Python
python实现对变位词的判断方法
2020/04/05 Python
python如何写出表白程序
2020/06/01 Python
Python流程控制语句的深入讲解
2020/06/15 Python
酒店人事专员岗位职责
2013/12/19 职场文书
安全教育实施方案
2014/03/02 职场文书
生日主持词
2014/03/20 职场文书
大学新闻系应届生求职信
2014/06/02 职场文书
合作协议书范本
2014/10/25 职场文书
领导干部群众路线对照检查材料
2014/11/05 职场文书
2016年大学迎新晚会工作总结
2015/10/15 职场文书
Python 绘制多因子柱状图
2022/05/11 Python
python数字图像处理之图像自动阈值分割示例
2022/06/28 Python