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 相关文章推荐
Saltstack快速入门简单汇总
Mar 01 Python
python3.6+django2.0开发一套学员管理系统
Mar 03 Python
使用DataFrame删除行和列的实例讲解
Apr 08 Python
python机器学习之神经网络实现
Oct 13 Python
浅谈Python3识别判断图片主要颜色并和颜色库进行对比的方法
Oct 25 Python
Python OpenCV视频截取并保存实现代码
Nov 30 Python
python 代码运行时间获取方式详解
Sep 18 Python
Python使用pickle进行序列化和反序列化的示例代码
Sep 22 Python
Python爬取豆瓣数据实现过程解析
Oct 27 Python
详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强
Nov 17 Python
python基于tkinter制作m3u8视频下载工具
Apr 24 Python
Python如何利用pandas读取csv数据并绘图
Jul 07 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
利用浏览器的Javascript控制台调试PHP程序
2014/01/08 PHP
flash javascript之间的通讯方法小结
2008/12/20 Javascript
有关DOM元素与事件的3个谜题
2010/11/11 Javascript
js页面跳转常用的几种方式
2010/11/25 Javascript
Javascript学习笔记 delete运算符
2011/09/13 Javascript
用JavaScript实现动画效果的方法
2013/07/20 Javascript
IE下window.onresize 多次调用与死循环bug处理方法介绍
2013/11/12 Javascript
Jquery图片延迟加载插件jquery.lazyload.js的使用方法
2014/05/21 Javascript
javascript简单比较日期大小的方法
2016/01/05 Javascript
js实现(全选)多选按钮的方法【附实例】
2016/03/30 Javascript
15款最好的Bootstrap在线编辑器
2016/08/03 Javascript
详谈表单重复提交的三种情况及解决方法
2017/08/16 Javascript
微信小程序定位当前城市的方法
2018/07/19 Javascript
jquery实现的简单轮播图功能【适合新手】
2018/08/17 jQuery
解决vue 界面在苹果手机上滑动点击事件等卡顿问题
2018/11/27 Javascript
elementUI select组件使用及注意事项详解
2019/05/29 Javascript
如何使用proxy实现一个简单完整的MVVM库的示例代码
2019/09/17 Javascript
Vue js with语句原理及用法解析
2020/09/03 Javascript
[44:40]2018DOTA2亚洲邀请赛3月30日 小组赛A组Liquid VS OG
2018/03/31 DOTA
[01:35]2018年度CS GO最佳战队-完美盛典
2018/12/17 DOTA
Python contextlib模块使用示例
2015/02/18 Python
对numpy中布尔型数组的处理方法详解
2018/04/17 Python
django解决跨域请求的问题
2018/11/11 Python
python 实现分组求和与分组累加求和代码
2020/05/18 Python
Python判断远程服务器上Excel文件是否被人打开的方法
2020/07/13 Python
python 实现压缩和解压缩的示例
2020/09/22 Python
HTML5中的Scoped属性使用实例
2014/04/23 HTML / CSS
家庭睡衣和家庭用品:Little Blue House
2018/03/18 全球购物
参观监狱心得体会
2014/01/02 职场文书
就业协议书范本
2014/04/11 职场文书
行政监察建议书
2014/05/19 职场文书
经济管理自荐书
2014/06/09 职场文书
软环境建设心得体会
2014/09/09 职场文书
考试作弊检讨书
2015/01/27 职场文书
2019消防宣传标语!
2019/07/10 职场文书
天谕手游15杯全调酒配方和调酒券的获得方式
2022/04/06 其他游戏