当前位置: 首页 > news >正文

python_日志相关

先看日志模块的代码逻辑图:
在这里插入图片描述

配上代码,助我加深理解:

# coding=utf-8
import logging
import time
from Common.function import project_path

# 单词:formatter格式器、handler处理程序、FileHandler文件内容处理程序
class FrameLog:
    """
    这里定义了日志输出的基本格式
    """
    def __init__(self, name=None):
        # 调用Framelog,user默认root、日志级别默认debug
        self.logger = logging.getLogger(name)
        self.logger.setLevel(logging.DEBUG)

        # handler定义了将日志发送到哪里,如:pycharm控制器、日志文件、邮件、短信等,
        # 创建一个handler,定义了将日志发送到文件,并设置了日志内容的格式、级别、
        self.log_name = f"{project_path()}/logs/" + time.strftime("%Y_%m_%d") + "_log.log"
        file = logging.FileHandler(self.log_name, "a", "utf-8")
        formatter = logging.Formatter('[%(asctime)s] %(filename)s-> %(funcName)s line:%(lineno)d [%(levelname)s]%(''message)s')
        file.setFormatter(formatter)
        file.setLevel(logging.DEBUG)

        # 再次创建一个handler,将日志发送到控制器(我用的是上面的格式器,你可以再这个handler里再自定义一个。)
        console = logging.StreamHandler(stream=None)
        console.setFormatter(formatter)  
        console.setLevel(logging.INFO)
        
        # 将2个处理器加入到logger中,不但向控制器输出、还想文件输出。
        self.logger.addHandler(file)
        self.logger.addHandler(console)
        
    def log(self):
        return self.logger


if __name__ == '__main__':
    # cgis模块,打印cgis-server模块的日志
    log = FrameLog('cgis-server').log()
    try:
        print(2/0)
    except ZeroDivisionError:
        print('这里打印在控制台')
        # 下面的message输入到日志
        log.error('这是一个框架性的错误11111111')
        log.debug('这是业务代码里的错误1111111111')
        log.info('这是业务代码里info级别的错误11111111111')
        log.critical('这是系统性的错误1111111')

    # fgis模块,打印fgis - server模块的日志
    log = FrameLog('fgis-server').log()
    try:
        print(2/0)
    except ZeroDivisionError:
        print('这里打印在控制台')
        # 下面的message输入到日志
        log.error('这是一个框架性的错误22222')
        log.debug('这是业务代码里的错误22')
        log.info('这是业务代码里info级别的错误2222')
        log.critical('这是系统性的错误222')

实际项目中,日志的定义都是通过配置文件实现的。请参考大佬

日志模块中是这么调用的:

# coding=utf-8
import logging
import logging.config
logging.config.fileConfig('log.conf')

logs = logging.getLogger('error')
logs.error('errorsssss')

相关文章:

  • jenkins总结1 - 安装、git、allure、email插件配置
  • pytest框架_简介、pytest.main()
  • pytest框架_@pytest.fixture()
  • pytest框架_@pytest.mark.usefixtures()
  • pytest框架_conftest.py详解
  • pytest框架_@pytest.mark.parametrize()
  • pytest框架_@pytest.yield_fixture()
  • pytest框架_@pytest.mark.xfail()
  • pytest框架_@pytest.mark.skipif()
  • pytest框架_pytest.ini
  • pytest框架_测试报告(allure-pytest)
  • pytest框架_pytest_runtest_makereport实现失败截图自动加入allure
  • pytest框架_assert断言
  • python_获取共享文件里的内容
  • 算法基础_二分查找
  • 2019.2.20 c++ 知识梳理
  • HTTP那些事
  • IDEA常用插件整理
  • JDK 6和JDK 7中的substring()方法
  • leetcode98. Validate Binary Search Tree
  • log4j2输出到kafka
  • rabbitmq延迟消息示例
  • Spring Boot快速入门(一):Hello Spring Boot
  • Vim 折腾记
  • vue-router 实现分析
  • 高程读书笔记 第六章 面向对象程序设计
  • 开发基于以太坊智能合约的DApp
  • 前端之Sass/Scss实战笔记
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 无服务器化是企业 IT 架构的未来吗?
  • 责任链模式的两种实现
  • 白色的风信子
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • postgresql行列转换函数
  • 湖北分布式智能数据采集方法有哪些?
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • !!Dom4j 学习笔记
  • #Z2294. 打印树的直径
  • #微信小程序(布局、渲染层基础知识)
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转) Face-Resources
  • (转)Android学习笔记 --- android任务栈和启动模式
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • *2 echo、printf、mkdir命令的应用
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .chm格式文件如何阅读
  • .net core 6 redis操作类
  • .net mvc部分视图
  • .net 无限分类