Python日志收集封装分享
  7Zum14bHf5yQ 2023年11月02日 85 0

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))


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

7Zum14bHf5yQ
最新推荐 更多