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 相关文章推荐
pycharm 使用心得(二)设置字体大小
Jun 05 Python
Python进程间通信用法实例
Jun 04 Python
使用python实现rsa算法代码
Feb 17 Python
Python设计足球联赛赛程表程序的思路与简单实现示例
Jun 28 Python
Python使用迭代器打印螺旋矩阵的思路及代码示例
Jul 02 Python
python中OrderedDict的使用方法详解
May 05 Python
Python 调用Java实例详解
Jun 02 Python
Python自定义线程池实现方法分析
Feb 07 Python
在Python中增加和插入元素的示例
Nov 01 Python
python实现文件助手中查看微信撤回消息
Apr 29 Python
python_array[0][0]与array[0,0]的区别详解
Feb 18 Python
详解用python -m http.server搭一个简易的本地局域网
Sep 24 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
Laravel 5.4重新登录实现跳转到登录前页面的原理和方法
2017/07/13 PHP
PHP实现的防止跨站和xss攻击代码【来自阿里云】
2018/01/29 PHP
JavaScript页面刷新与弹出窗口问题的解决方法
2010/03/02 Javascript
给事件响应函数传参数的四种方式小结
2013/12/05 Javascript
jQuery中innerHeight()方法用法实例
2015/01/19 Javascript
AngularJS基础 ng-non-bindable 指令详细介绍
2016/08/02 Javascript
javascript实现无法关闭的弹框
2016/11/27 Javascript
微信小程序 弹框和模态框实现代码
2017/03/10 Javascript
JavaScript实现修改伪类样式
2017/11/27 Javascript
jQuery实现的手动拖动控制进度条效果示例【测试可用】
2018/04/18 jQuery
JavaScript设计模式之观察者模式实例详解
2019/01/16 Javascript
npm qs模块使用详解
2020/02/07 Javascript
微信小程序使用 vant Dialog组件的正确方式
2020/02/21 Javascript
vue实现购物车案例
2020/05/30 Javascript
如何利用javascript接收json信息并进行处理
2020/08/06 Javascript
Ant Design moment对象和字符串之间的相互转化教程
2020/10/27 Javascript
python中管道用法入门实例
2015/06/04 Python
Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
2016/06/14 Python
python hook监听事件详解
2018/10/25 Python
django+mysql的使用示例
2018/11/23 Python
基于Python中isfile函数和isdir函数使用详解
2019/11/29 Python
Python3之外部文件调用Django程序操作model等文件实现方式
2020/04/07 Python
python 异步async库的使用说明
2020/05/04 Python
python代码实现猜拳小游戏
2020/11/30 Python
html5定位获取当前位置并在百度地图上显示
2014/08/22 HTML / CSS
美国在线眼镜店:GlassesShop
2018/11/15 全球购物
Lucene推荐的分页方式是什么?
2015/12/07 面试题
综合办公室主任职责
2013/12/16 职场文书
初中政治教学反思
2014/01/17 职场文书
畜牧兽医本科生的自我评价
2014/03/03 职场文书
商务经理岗位职责
2014/08/03 职场文书
工作犯错保证书
2015/05/11 职场文书
2015年评职称个人工作总结
2015/10/15 职场文书
创业计划书之情侣餐厅
2019/09/29 职场文书
python 爬取华为应用市场评论
2021/05/29 Python
Python 阶乘详解
2021/10/05 Python