首页 > 编程语言 >Python日志收集封装分享

Python日志收集封装分享

时间:2023-08-15 21:05:01浏览次数:42  
标签:logger logging Python sum error 封装 日志 self

1、什么是日志

日志跟踪软件运行时事件的方法(跟踪器)

2、日志作用

问题地位

信息查询

数据分析

3、内置模块 logging

logging的四大组件:

1、日志器 Logger --->入口

2、处理器 Handler---》执行者 决定日志在不同端进行输出 ( 日志文件 控制

台)

3、格式器 Formatter---》日志输入的内容

4、过滤器 Filter----》输出感兴趣日志信息,过滤掉不感兴趣的日志信息

关系:1个日志器可以有多个处理器,

每个处理器可以各自的格式器及过滤器

4、logging模块的应用

从低到高日志级别:

debug 调试信息

info 关键事件描述warning 警告信息

error

错误信息

critical

严重错误信息

import logging
import os
from logging import handlers

from Common.handle_config import conf
from Common.handle_path import logs_dir


class MyLogger(logging.Logger):

    def __init__(self,file=None):
        # 设置输出级别、输出渠道、输出日志格式
        # super().__init__(name,level)
        super().__init__(conf.get("log","name"),conf.get("log","level"))

        # 日志格式
        fmt = '%(asctime)s %(name)s %(levelname)s %(filename)s-%(lineno)d line:%(message)s'
        formatter = logging.Formatter(fmt)

        # 控制台渠道
        sh = logging.StreamHandler()
        sh.setFormatter(formatter)
        self.addHandler(sh)

        if file:
            # 文件渠道
            fh = logging.handlers.TimedRotatingFileHandler(file,   # 定义日志文件
                                                   when="D",   # 记录日志时间:按天
                                                   interval=1,  # 记录日志的频率
                                                   backupCount=7,  # 保存日志的时间
                                                   encoding="UTF-8"  # 记录日志的编码方式
                                                   )  # 文件处理器
            fh.setFormatter(formatter)
            self.addHandler(fh)


# 是否需要写入文件
if conf.getboolean("log","file_ok"):
    file_name = os.path.join(logs_dir,conf.get("log","file_name"))
else:
    file_name = None

logger = MyLogger(file_name)

if __name__ == '__main__':
    logger.info("1111111111111")

5、重复日志输出的原因

调用一次函数 就会重复添加处理器解决方案:添加日志器和处理器前做判断是否已经存在

import logging
class FrameLog:

    def getLogger(self):

        # 创建日志器
        logger = logging.getLogger("logger")
        # 日志输出当前级别及以上级别的信息,默认日志输出最低级别是warning
        if not logger.handlers:
            logger.setLevel(logging.INFO)
            # 创建控制台处理器----》输出控制台
            SH = logging.StreamHandler()
            # 创建文件处理器----》输出文件
            FH = logging.FileHandler("log.txt")

            # 日志包含哪些内容    时间  文件  日志级别 :事件描述/问题描述
            formatter = logging.Formatter(fmt="[%(asctime)s] [%(filename)s] %(levelname)s :%(message)s",
                                          datefmt='%Y/%m/%d %H:%M:%S')
            logger.addHandler(SH)
            logger.addHandler(FH)
            SH.setFormatter(formatter)
            FH.setFormatter(formatter)

        return logger

    def sum(self,*args):
        """
        求多个数之和
        :param args:
        :return:
        """
        try:
            sum=0
            for num in args:
                sum+=num

            self.getLogger().info(f"计算多个数之和={sum}")
            return sum
        except  Exception as  error:
            self.getLogger().error("计算多个数之和有异常:\n"+str(error))


    def sum_two(self,x,y):
        """
        求两个数之和
        :param args:
        :return:
        """
        try:
            sum=0
            sum=x+y
            self.getLogger().info(f"计算多个数之和={sum}")
            return sum
        except  Exception as  error:
            self.getLogger().error("计算多个数之和有异常:\n"+str(error))

    def sum_three(self,x,y,z):
        """
        求两个数之和
        :param args:
        :return:
        """
        try:
            sum=0
            sum=x+y+z
            self.getLogger().info(f"计算多个数之和={sum}")
            return sum
        except  Exception as  error:
            self.getLogger().error("计算多个数之和有异常:\n"+str(error))


标签:logger,logging,Python,sum,error,封装,日志,self
From: https://blog.51cto.com/u_16218092/7092850

相关文章

  • python
    defcapitalize_words(sentence):  words=sentence.split()  capitalized_words=[word.capitalize()forwordinwords]  return"".join(capitalized_words)#示例输入sentence="helloworld,howareyou?"#调用函数并打印结果print("首字母大写后的句子为......
  • Python Fire:自动生成命令行接口
    首先创建一个 student_file.pypipinstallfire使用 Fire 转换成命令行程序 1.默认方式importfiredefimport_file(fp):print("函数1打印结果:{}".format(fp))defexport_file(fp):print("函数2打印结果:{}".format(fp))if__name__=="__m......
  • Python用PyMC贝叶斯GLM广义线性模型、NUTS采样器拟合、后验分布可视化
    全文链接:https://tecdat.cn/?p=33436原文出处:拓端数据部落公众号尽管贝叶斯方法相对于频率主义方法的理论优势已经在其他地方进行了详细讨论,但其更广泛采用的主要障碍是“可用性”。而使用贝叶斯方法,客户可以按照自己认为合适的方式定义模型。线性回归在此示例中,我们将帮助客......
  • python的websocketAPP
    一.websocket简介及安装使用pip命令安装websocket库:pip3installwebsocketwebsocket.WebSocketApp 是对 websocket.WebSocket 的封装,支持自动定时发送PING帧,支持事件驱动方式的数据帧接收,可用于长期的WebSocket连接。websocket中就有建立连接connect、发送消息send等函......
  • Python | 文件、异常模块与包
    1.文件1.1文件编码编码就是一种规则集合,记录了内容和二进制间进行相互转换的逻辑。计算机常用编码:UTF-8GBKBig5UTF-8是目前全球通用的编码格式除非有特殊需求,否则,一律以UTF-8格式进行文件编码即可。1.2文件的读取操作一般,文件可以分为文本文件、视频文件、音频......
  • Python小项目:利用tkinter与图灵机器人制作智能聊天系统
    文章目录1前言2代码分模块讲解2.1导入相应的库2.2创建机器人对象2.3创建信息交互过程对象2.4页面创建对象3整体代码4结语1前言在本项目中,我们将探索如何使用Python的tkinter库以及图灵机器人API来构建一个智能聊天系统。本项目的初衷是通过实际操作,结合GUI编程和API调用......
  • Python小项目:利用tkinter搭建粗糙集简约算法软件
    文章目录1前言2粗糙集简约算法简述2.1基本概念2.2算法原理2.3应用领域3实验详解3.1实验数据3.2实验说明及过程截图3.3实验结果4代码详解5结语完整项目下载:下载链接1前言在本次旅程中,我们将探索一个令人兴奋的主题——“Python小项目:利用tkinter搭建粗糙集简约算法软件......
  • Python小项目:利用 U-net 完成细胞图像分割
    文章目录1前言2实验概述3U-net概述4实验过程及代码5结语完整数据集下载:下载链接1前言在当今数字化时代,图像处理和分析已经成为了科学研究和技术应用领域的关键部分。在生物医学领域,图像分析对于诊断、治疗和疾病研究具有重要意义。本项目将带您深入了解U-net细胞分割技......
  • Python小项目:利用tkinter搭建个人所得税计算器
    文章目录1前言2详细介绍3代码介绍4结语完整项目下载:下载链接1前言在当今数字化时代,个人所得税的计算对于每个人来说都是一个重要而复杂的任务。为了让个人所得税的计算变得更加便捷和直观,本实验采用了Python编程语言,并借助tkinter图形化界面库,搭建了一个实用的个人所得......
  • Python小项目:利用tkinter开发测手速小游戏
    文章目录1简介2代码分模块介绍2.1导入需要的包2.2定义全局变量2.3定义页面组件类2.4定义增加类2.5定义结束类3整体代码展示4结语1简介利用tkinter开发测手速的小游戏,大家10s内可以点击鼠标多少次呢?想测试一下吗?来试试测手速下游戏吧!仅供娱乐!试玩视频:测手速小游戏游......