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实现网页链接提取的方法分享
Feb 25 Python
python Socket之客户端和服务端握手详解
Sep 18 Python
python 打印直角三角形,等边三角形,菱形,正方形的代码
Nov 21 Python
python实现闹钟定时播放音乐功能
Jan 25 Python
python指定写入文件时的编码格式方法
Jun 07 Python
python实现桌面气泡提示功能
Jul 29 Python
对Python中 \r, \n, \r\n的彻底理解
Mar 06 Python
浅谈Python线程的同步互斥与死锁
Mar 22 Python
python如何导出微信公众号文章方法详解
Aug 31 Python
python编写扎金花小程序的实例代码
Feb 23 Python
利用 Python 的 Pandas和 NumPy 库来清理数据
Apr 13 Python
Python尝试实现蒙特卡罗模拟期权定价
Apr 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版本号
2006/10/09 PHP
详解php魔术方法(Magic methods)的使用方法
2016/02/14 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
2020/04/04 PHP
用JavaScript显示随机图像或引用
2009/04/21 Javascript
javascript中typeof的使用示例
2013/12/19 Javascript
Jquery原生态实现表格header头随滚动条滚动而滚动
2014/03/18 Javascript
jQuery动态增减行的实例代码解析(推荐)
2016/12/05 Javascript
JS实现的自动打字效果示例
2017/03/10 Javascript
使用webpack-dev-server处理跨域请求的方法
2018/04/18 Javascript
AngularJS与后端php的数据交互方法
2018/08/13 Javascript
浅谈VueJS SSR 后端绘制内存泄漏的相关解决经验
2018/12/20 Javascript
微信小程序外卖选购页实现切换分类与数量加减功能案例
2019/01/15 Javascript
js的各种数据类型判断的介绍
2019/01/19 Javascript
vue实现图片裁剪后上传
2020/12/16 Vue.js
在Gnumeric下使用Python脚本操作表格的教程
2015/04/14 Python
Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)
2016/11/16 Python
深入浅出学习python装饰器
2017/09/29 Python
详解Python核心对象类型字符串
2018/02/11 Python
Python中的TCP socket写法示例
2018/05/11 Python
对Python2与Python3中__bool__方法的差异详解
2018/11/01 Python
python执行CMD指令,并获取返回的方法
2018/12/19 Python
实例详解python函数的对象、函数嵌套、名称空间和作用域
2019/05/31 Python
手把手教你Python yLab的绘制折线图的画法
2019/10/23 Python
利用python3 的pygame模块实现塔防游戏
2019/12/30 Python
Python如何输出警告信息
2020/07/30 Python
HTML5 DeviceOrientation实现手机网站摇一摇功能代码实例
2015/04/24 HTML / CSS
墨西哥购物网站:Elektra
2020/01/21 全球购物
国贸专业个人求职信范文
2014/01/08 职场文书
党章学习思想汇报
2014/01/14 职场文书
小学生美德少年事迹材料
2014/08/24 职场文书
践行三严三实心得体会
2014/10/13 职场文书
作风转变年心得体会
2014/10/22 职场文书
开展党的群众路线教育实践活动情况汇报
2014/11/05 职场文书
爱护环境卫生倡议书
2015/04/29 职场文书
运动会闭幕式主持词
2015/07/01 职场文书
使用JS前端技术实现静态图片局部流动效果
2022/08/05 Javascript