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 11 Python
python实现文件快照加密保护的方法
Jun 30 Python
Python3实现简单可学习的手写体识别(实例讲解)
Oct 21 Python
django开发教程之利用缓存文件进行页面缓存的方法
Nov 10 Python
Tensorflow之构建自己的图片数据集TFrecords的方法
Feb 07 Python
教你用Python创建微信聊天机器人
Mar 31 Python
Python切片操作深入详解
Jul 27 Python
python接口调用已训练好的caffe模型测试分类方法
Aug 26 Python
Python aiohttp百万并发极限测试实例分析
Oct 26 Python
详解python中docx库的安装过程
Nov 08 Python
pytorch中图像的数据格式实例
Feb 11 Python
利用Python优雅的登录校园网
Oct 21 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
php完全过滤HTML,JS,CSS等标签
2009/01/16 PHP
php5 non-thread-safe和thread-safe这两个版本的区别分析
2010/03/13 PHP
php中Session的生成机制、回收机制和存储机制探究
2014/08/19 PHP
php调用KyotoTycoon简单实例
2015/04/02 PHP
微信公众平台开发之天气预报功能
2015/08/31 PHP
Yii框架核心组件类实例详解
2019/08/06 PHP
收藏一些不常用,但是有用的代码
2007/03/12 Javascript
js AspxButton的客户端操作
2009/06/26 Javascript
自己整理的一个javascript日期处理函数
2010/10/16 Javascript
JS焦点图切换,上下翻转
2011/05/12 Javascript
Js base64 加密解密介绍
2013/10/11 Javascript
探讨JQUERY JSON的反序列化类 using问题的解决方法
2013/12/19 Javascript
javascript实现信息增删改查的方法
2015/07/25 Javascript
jQuery实现右侧显示可向左滑动展示的深色QQ客服效果代码
2015/10/23 Javascript
javascript实现简单计算器效果【推荐】
2016/04/19 Javascript
jQuery选取所有复选框被选中的值并用Ajax异步提交数据的实例
2017/08/04 jQuery
轻松搞定jQuery+JSONP跨域请求的解决方案
2018/03/06 jQuery
Vue 理解之白话 getter/setter详解
2019/04/16 Javascript
简单了解JavaScript作用域
2020/07/31 Javascript
vue 组件简介
2020/07/31 Javascript
玩转python爬虫之正则表达式
2016/02/17 Python
Python脚本获取操作系统版本信息
2016/12/17 Python
Python中第三方库Requests库的高级用法详解
2017/03/12 Python
朴素贝叶斯分类算法原理与Python实现与使用方法案例
2018/06/26 Python
Python模拟百度自动输入搜索功能的实例
2019/02/14 Python
Python File(文件) 方法整理
2019/02/18 Python
python 默认参数相关知识详解
2019/09/18 Python
H5调用相机拍照并压缩图片的实例代码
2017/07/20 HTML / CSS
婚鞋、新娘鞋、礼服鞋、童鞋:Nina Shoes
2019/09/04 全球购物
.net软件工程师面试题
2015/03/31 面试题
秘书行业自我鉴定范文
2013/12/30 职场文书
幼儿园母亲节活动方案
2014/03/10 职场文书
作风转变心得体会
2014/09/02 职场文书
小学教研工作总结2015
2015/05/13 职场文书
二十年同学聚会感言
2015/07/30 职场文书
选调生挂职锻炼工作总结
2015/10/23 职场文书