一个较为实用的日志类【Python】

文章目录

  • 前言
  • 一、LogUtil 类提供了以下功能
  • 二、代码
  • 三、使用


前言

在软件开发中,日志记录是一项重要的任务,它可以帮助我们跟踪应用程序的行为、故障排查和性能分析。为了简化日志记录的过程并提供更多的灵活性,下面介绍一个名为 LogUtil 的实用日志类。
该日志类能够将信息输出到终端,同时存储到指定的log文件中。

一、LogUtil 类提供了以下功能

LogUtil 类提供了以下功能:

初始化函数:构造函数接受参数 log_path(日志文件路径)、log_name(日志文件名)、clear_content(是否清空日志文件内容,默认为 False)、no_level(是否禁用日志级别,默认为 False)、no_time(是否禁用时间戳,默认为 False)和 cmd_print(是否在命令行打印日志,默认为 True)。

日志文件处理:在初始化时,LogUtil 类会检查并创建日志文件路径,如果指定了清空日志文件内容选项,将清空日志文件的内容。日志文件的路径和名称由 log_path 和 log_name 参数确定。

日志级别和格式:LogUtil 类使用 logging 模块创建一个日志记录器(logger),并设置日志级别为 DEBUG。根据传入的参数,可以选择是否在日志记录中包含日志级别和时间戳。日志格式根据设置的参数动态生成。

文件处理器:LogUtil 类使用 logging 模块的 FileHandler 创建一个文件处理器(file_handler),用于将日志记录写入日志文件。文件处理器的级别也设置为 DEBUG,并使用上述定义的日志格式进行格式化。

日志记录方法:LogUtil 类提供了四种日志记录方法:info、debug、error 和 warning。这些方法将消息记录到日志文件中,并根据 cmd_print 参数决定是否在命令行打印相应的日志消息。

二、代码

import os
import loggingclass LogUtil:def __init__(self, log_path, log_name, clear_content=False, no_level=False, no_time=False, cmd_print=True):if not os.path.exists(log_path):os.makedirs(log_path)file_path = os.path.join(log_path, log_name + '.log')if clear_content:open(file_path, 'w').close()  # 清空日志文件内容self.logger = logging.getLogger(log_name)self.logger.setLevel(logging.DEBUG)format = ''if not no_level:format = format + '%(levelname)s'if not no_time:format = format + ' - %(asctime)s - %(message)s'formatter = logging.Formatter(format)file_handler = logging.FileHandler(file_path, encoding='utf-8')file_handler.setLevel(logging.DEBUG)file_handler.setFormatter(formatter)self.logger.addHandler(file_handler)self.cmd_print = cmd_printdef info(self, message):self.logger.info(message)if self.cmd_print:print("====INFO===|" + str(message))def debug(self, message):self.logger.debug(message)if self.cmd_print:print("===DEBUG===|" + str(message))def error(self, message):self.logger.error(message)if self.cmd_print:print("===ERROR===|" + str(message))def warning(self, message):self.logger.warning(message)if self.cmd_print:print("=WARNING===|" + str(message))

三、使用

创建了一个名为 log 的 LogUtil 实例,并指定了日志文件的路径为 “logs”,日志文件名为 “mylog”。设置 clear_content 参数为 True,以清空日志文件的内容。然后,我们使用 info、debug、error 和 warning 方法记录不同级别的日志消息。

除了将日志消息写入日志文件,如果设置了 cmd_print 参数为 True,相应的日志消息也会在命令行中打印出来。

log = LogUtil("logs", "mylog", clear_content=True)log.info("This is an information message.")
log.debug("This is a debug message.")
log.error("This is an error message.")
log.warning("This is a warning message.")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/189090.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开源 LLM 安全扫描器

Vigil 是一款开源安全扫描程序,可检测即时注入、越狱以及对大型语言模型(LLM) 的其他潜在威胁。 当攻击者使用专门设计的输入成功影响 LLM 时,就会出现即时注入。这导致 LLM 无意中实现了攻击者设定的目标。 ​ 我对 LLM 的可能性感到非常兴奋&#xff…

vue3新特性 compositionAPi与React.js中Hooks的异同点

1. React.js中的Hooks基本使用 React Hooks允 许你"勾入"诸如组件状态 和副作用处理等React功能中。 Hooks只能用在函数组件中,并允许我们 在不需要创建类的情况下将状态、副作用处 理和更多东西带入组件中。React核心团队 奉.上的采纳策略是不反对类组…

关于web前端通过js获取后端mysql数据库数据的一个方法

关于web前端通过js获取后端mysql数据库数据的一个方法 问题引入 关于html的教程很多,关于mysql的教程也很多,那么怎么让html展示mysql的数据呢? 一言以蔽之 前端通过js向后端发起一个http请求,后端响应这个请求并返回数据 实…

springboot参数汇总

multipart multipart.enabled 开启上传支持(默认:true) multipart.file-size-threshold: 大于该值的文件会被写到磁盘上 multipart.location 上传文件存放位置 multipart.max-file-size最大文件大小 multipart.max-request-size 最大请求…

2024年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-B卷

2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-B卷 2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-B卷A 模块基础设施设置/安全加固(200 分)A-1:登录安全加固(Windows…

Hdoop学习笔记(HDP)-Part.4 基础环境配置

四、基础环境配置 1.SSH免密登录 在hdp01、hdp02上生成公钥,配置免密登录到其他节点 ssh-keygen -t rsa -f ~/.ssh/id_rsa -C username_root ssh-copy-id -i ~/.ssh/id_rsa.pub -p 22 root192.168.111.201 ssh-copy-id -i ~/.ssh/id_rsa.pub -p 22 root192.168.1…

点云从入门到精通技术详解100篇-基于三维点云的工件曲面轮廓检测与机器人打磨轨迹规划(中)

目录 2.2.2 散乱点云滤波去噪 2.2.3 海量点云数据压缩 2.3 点云采集与预处理实验

智能安防无人机——一种安防巡检新方案

在高新技术的推动下,安防无人机在监控、巡逻等领域的使用频率越来越高,逐渐成为安防救援的重要帮手。安防无人机作为城市安全应急保障体系的重要组成部分,在未来将变得不可或缺。 一、安防无人机的定义及构成 复亚智能无人机全自主巡飞系统由…

系列十六、SpringBoot内置web服务器为Tomcat原理分析

一、概述 作为Spring家族的明星产品,SpringBoot极大地简化了程序员的日常开发,提高了开发效率。我们很容易得借助于SpringBoot就可以快速开发业务代码,不知道大家有没有思考过,当我们在idea中创建了一个SpringBoot项目&#xff0c…

Linux 权限管理

1 Linux 安全模型 AAA认证资源分派: 当用户登录时,系统会自动分配令牌 token,包括用户标识和组成员等等信息 1.1 用户 Linux 中每个用户是通过 User ID(UID)来唯一标识的。 1.2 用户组 Linux 中可以将一个或者多个…

详解Linux常用命令

目录 1. ps 命令 2. top 命令 3. grep 命令 4. df 命令 5. tail 命令 6. head 命令 7. cat 命令 8. --help 和 man 命令 9. cd 命令 10. mkdir 命令 11. rm 命令 12. mv 和 cp 命令 13. touch 命令 14. vi 或 vim 命令 15. chmod 修改权限 16. 打包和压缩文件 …

【开源视频联动物联网平台】j2mod 库写一个Modbus TCP 服务器

j2mod 是一个用于 Modbus 通信协议的 Java 库,可以用来创建 Modbus TCP 服务器。以下是一个简单的示例代码,演示如何使用 j2mod 创建一个 Modbus TCP 服务器。 首先,确保你已经添加 j2mod 库到你的项目中。你可以从 j2mod 的官方网站&#x…

LINUX 嵌入式C编程--信号编程

基本概念 信号是事件发生时对进程的通知机制,也可以把它称为软件中断。信号与硬件中断的相似之处在于能够打断程序当前执行的正常流程,其实是在软件层次上对中断机制的一种模拟。信号提供了一种处理异步事件的方法。 信号目的 **信号的目的是用来通信…

linux里source、sh、bash、./有什么区别

1、source source a.sh 在当前shell内去读取、执行a.sh,而a.sh不需要有"执行权限" source命令可以简写为"." . a.sh 注意:中间是有空格的。 2、sh/bash sh a.sh bash a.sh 都是打开一个subshell去读取、执行a.sh,而a.…

IntelliJ IDEA创建springboot项目时不能选择java8的问题解决方案

最近博主也有创建springboot项目,发现了IntelliJ IDEA在通过Spring Initilizer初始化项目的时候已经没有java8版本的选项了。 基于这个问题,有了这篇文章的分享,希望能够帮助大家克服这个困难。 如图,现在创建springboot项目的时…

C++ 传递指针给函数

C 允许您传递指针给函数&#xff0c;只需要简单地声明函数参数为指针类型即可。 下面的实例中&#xff0c;我们传递一个无符号的 long 型指针给函数&#xff0c;并在函数内改变这个值&#xff1a; #include <iostream> #include <ctime>using namespace std;// 在…

现代化工安全保障迎来巡查无人机新时代

当今现代化工企业呈现出规模不断扩大&#xff0c;设备逐渐趋向大型化的局面&#xff0c;由此导致化工安全生产面临日益严峻的挑战。然而&#xff0c;随着巡查无人机技术的成熟&#xff0c;这种新的高效手段正在提高化工安全检测的工作效率。 一、传统化工安全巡检存在弊端 化工…

了解 ignore_above 参数对 Elasticsearch 中磁盘使用的影响

在 Elasticsearch 中&#xff0c;ignore_above 参数允许你忽略&#xff08;而不是索引&#xff09;长于指定长度的字符串。 这对于限制字段的大小以避免性能问题很有用。 在本文中&#xff0c;我们将探讨 “ignore_above” 参数如何影响 Elasticsearch 中字段的大小&#xff0c…

Django-Redis

NoSQL&#xff1a;(不支持sql语句) Redis MongoDB Hbase hadoop Cassandra hadoop key-value数据库&#xff08;非关系性数据库&#xff09; redis优势 性能高&#xff0c;读取速度快&#xff0c;存在内存中 Redis应用场景 用来做缓存 在某些特定场景下替代传统数据库---社交…

SqlServer_分页_OFFSET_FETCH

使用SQL server分页 使用SQL server分页的时候踩了一个坑&#xff1a; 用mybatis-plus分页的时候始终报错 代码&#xff1a;Page<SystemDictCatalog> page new Page<>(data.getPage(), data.getLimit()); QueryWrapper<SystemDictCatalog> wrapper new Qu…