• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

python 搞代码 4年前 (2022-01-09) 18次浏览 已收录 0个评论

前言

曾经转载过一篇关于python日志模块logging的详解 https://www.cnblogs.com/linuxchao/p/linuxchao-log.html, 虽然这篇文章是别人写的, 但是我就是靠着这篇文章入门的logging,所以我觉得没必要再继续说些理论的东西,今天就简单的对日志做个封装,实际工作中直接拿去用吧

方法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-[LogInfoMess<strong style="color:transparent">本文来源gaodai#ma#com搞@@代~&码网^</strong>age]: %(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

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:python操作日志的封装方法(两种方法)

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址