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

一、Python 日志系统设计之不同级别的系统日志

设置基本的日志模块

日志记录器,日志容器,日志文件处理器,日志轮转以及日志的不同级别调用

以下是具体代码实现过程和代码具体的注释说明

""""""
import logging
import os
import datetime
from logging.handlers import RotatingFileHandlerclass UserLog(object):def __init__(self):# 获取当前日志记录器self.logger1 = logging.getLogger(__name__)# 从日志管理器的字典中移除当前模块对应的日志记录器,防止重复logging.Logger.manager.loggerDict.pop(__name__)# 将当前日志记录器的处理器列表清空self.logger1.handlers = []# 从当前日志记录器中移除所有已有的处理器self.logger1.removeHandler(self.logger1.handlers)if not self.logger1.handlers:self.logger1.setLevel(logging.DEBUG)  # 测试环境# self.logger1.setLevel(logging.WARNING) #生产环境# 文件名字base_dir = os.path.dirname(os.path.abspath(__file__))log_dir = os.path.join(base_dir, "logs")log_file = datetime.datetime.now().strftime("%Y-%m-%d") + ".log"log_name = log_dir + "/" + log_file# 文件输出日志, writes formatted logging records to disk filesself.file_handle = logging.FileHandler(log_name, 'a', encoding='utf-8')# 实现日志文件的轮转self.file_handle = RotatingFileHandler(log_name, maxBytes=10000, backupCount=5)# 这里可以设置日志等级,INFO,WARNING,DEBUG,ERRORself.file_handle.setLevel(logging.INFO)# 加上日志时间进行操作formatter = logging.Formatter('%(asctime)s %(filename)s--> %(funcName)s %(levelno)s: %(levelname)s ----->%(message)s')self.file_handle.setFormatter(formatter)self.logger1.addHandler(self.file_handle)def get_log(self):return self.logger1def close_handle(self):#从当前日志记录器中移除所有已有的处理器self.logger1.removeHandler(self.file_handle)#移除文件处理器self.file_handle.close()def main_test():logger = UserLog().get_log()#加载info信息logger.info("这是一个信息日志")#加载warninglogger.warning("这是一个警告日志")#加载errorlogger.error("这是一个错误日志")if __name__ == '__main__':main_test()
  1. UserLog 类的定义:

    • __init__ 方法:
      • 获取当前模块的日志记录器 logger1 ,并通过一些操作确保没有重复的处理器。
      • 设置日志记录器的级别,在测试环境设置为 DEBUG,生产环境可设置为 WARNING
      • 准备日志文件的相关设置,包括确定日志文件夹路径、文件名、文件处理器等。
      • 对文件处理器进行了归档设置,如文件大小限制和备份数量。
      • 设置了日志的格式,包含时间、文件名、函数名、日志级别编号、日志级别名称和具体消息。
      • 将文件处理器添加到日志记录器。
    • get_log 方法:返回创建好的日志记录器,供外部使用。
    • close_handle 方法:从日志记录器中移除文件处理器,并关闭文件处理器。
  2. main_test 函数:

    • 获取 UserLog 类创建的日志记录器 logger
    • 分别使用 infowarningerror 方法记录不同级别的日志消息。
  3. __main__ 部分,调用 main_test 函数执行主要的测试逻辑。

实现一个自定义的日志类 UserLog,用于创建和配置日志记录器,并提供了在不同级别记录日志的功能。同时,通过归档设置和格式设置,对日志的存储和展示进行了定制化处理。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 科技创新引领水利行业升级:深入分析智慧水利解决方案的核心价值,展望其在未来水资源管理中的重要地位与作用
  • Ubuntu 20版本安装Redis教程,以及登陆
  • beyond Compare连接 openWrt 和 VsCode
  • 【python】QWidget父子关系,控件显示优先级原理剖析与应用实战演练
  • 助力用户构建精准营销的未来战场--携手某军工企业打造市场管理新纪元
  • 一个 Docker 搭建的自动化电视剧下载和管理工具
  • 前端使用Vue和Element实现可拖动弹框效果,且不影响底层元素操作,Cesium作为底图(可拖拽的视频实时播放弹框,底层元素可以正常操作)
  • FastGPT源码部署,不使用docker
  • 软件开发C#(Sharp)总结(续)
  • PHP智慧社区小区物业管理系统小程序源码
  • Spark RDD优化
  • MacOS如何切换shell类型
  • java链表常见简单面试算法题
  • 优化 .NET Core 应用程序的安全性和性能以应对高负载
  • 前端vue 实现取色板 的选择
  • [译] React v16.8: 含有Hooks的版本
  • golang中接口赋值与方法集
  • input的行数自动增减
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • java取消线程实例
  • js继承的实现方法
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • Sass Day-01
  • 浮现式设计
  • 聚簇索引和非聚簇索引
  • 聊一聊前端的监控
  • 事件委托的小应用
  • 新手搭建网站的主要流程
  • #laravel 通过手动安装依赖PHPExcel#
  • #进阶:轻量级ORM框架Dapper的使用教程与原理详解
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (Note)C++中的继承方式
  • (pytorch进阶之路)扩散概率模型
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (二)springcloud实战之config配置中心
  • (二)windows配置JDK环境
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (附源码)springboot教学评价 毕业设计 641310
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (过滤器)Filter和(监听器)listener
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • .a文件和.so文件
  • .Net 6.0--通用帮助类--FileHelper
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .net 怎么循环得到数组里的值_关于js数组
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • [ C++ ] STL_vector -- 迭代器失效问题