在Python项目中自定义日志工具

在Python项目中自定义日志工具

日志记录是软件开发中的一个关键部分,它可以帮助开发人员调试代码、监控运行状况以及记录重要事件。在Python中,logging 模块提供了强大的日志记录功能。本文将介绍如何创建一个日志工具,使其能够同时将日志输出到文件和控制台,并确保日志文件在项目目录的 log 文件夹中。我们还将解决在PyCharm中查看日志文件乱码的问题。

在这里插入图片描述

在这里插入图片描述

一、创建日志工厂模块

首先,我们创建一个日志工厂模块 log_factory.py。这个模块将定义一个 get_logger 函数,该函数允许用户自定义日志文件的名称,并确保日志文件保存在项目目录的 log 文件夹内。

import logging
import osdef get_logger(name, log_file='my_log.log', log_level=logging.DEBUG, encoding='utf-8'):# 定义日志格式LOG_FORMAT = "[%(levelname)s] [%(asctime)s] [%(module)s.%(funcName)s] [line:%(lineno)d]: %(message)s"# 获取项目目录路径project_dir = os.path.dirname(os.path.abspath(__file__))# 创建log文件夹路径log_dir = os.path.join(project_dir, 'log')# 如果log文件夹不存在,则创建它if not os.path.exists(log_dir):os.makedirs(log_dir)# 完整的日志文件路径log_file_path = os.path.join(log_dir, log_file)# 创建一个日志记录器logger = logging.getLogger(name)logger.setLevel(log_level)  # 设置日志记录器的级别# 检查是否已有处理器,避免重复添加处理器if not logger.handlers:# 创建一个日志格式器formatter = logging.Formatter(LOG_FORMAT)# 创建文件处理器,指定编码格式file_handler = logging.FileHandler(log_file_path, encoding=encoding)file_handler.setLevel(log_level)  # 设置文件处理器的级别file_handler.setFormatter(formatter)  # 将格式器添加到文件处理器# 创建控制台处理器console_handler = logging.StreamHandler()console_handler.setLevel(log_level)  # 设置控制台处理器的级别console_handler.setFormatter(formatter)  # 将格式器添加到控制台处理器# 将文件处理器和控制台处理器添加到日志记录器logger.addHandler(file_handler)logger.addHandler(console_handler)return logger

在这个模块中,我们定义了日志格式、创建了日志目录并设置了文件和控制台处理器。我们还确保文件处理器使用UTF-8编码格式,以避免在查看日志时出现乱码。

二、使用日志工厂

在需要记录日志的地方,我们可以简单地导入并使用这个日志工厂。例如,在 main.py 中:

from log_factory import get_logger# 获取日志记录器,自定义日志文件名
logger = get_logger('my_app_logger', log_file='custom_log.log')# 示例日志消息
logger.debug("这是一个调试消息")
logger.info("这是一个信息消息")
logger.warning("这是一个警告消息")
logger.error("这是一个错误消息")
logger.critical("这是一个严重错误消息")

通过这种方式,日志文件将被创建在项目目录的 log 文件夹内。如果 log 文件夹不存在,代码会自动创建它。

三、解决PyCharm中日志文件乱码问题

在PyCharm中查看日志文件时,如果出现乱码问题,通常是由于日志文件的编码格式与PyCharm解析文件时的编码格式不一致引起的。我们可以按照以下步骤解决这个问题:

1. 设置日志文件编码

log_factory.py 中,我们已经指定了文件处理器的编码格式为 UTF-8:

file_handler = logging.FileHandler(log_file_path, encoding='utf-8')

2. 在PyCharm中设置文件编码

确保PyCharm中的文件编码设置与日志文件的编码格式一致:

  • 打开日志文件。
  • 在PyCharm窗口的右下角,点击当前文件编码(例如 UTF-8)。
  • 在弹出的菜单中,选择 UTF-8

3. 设置默认编码(可选)

你还可以设置PyCharm的默认文件编码,以确保所有打开的文件都使用相同的编码格式:

  • 进入 File -> Settings(Windows/Linux)或 PyCharm -> Preferences(Mac)。
  • 导航到 Editor -> File Encodings
  • 设置 Global EncodingProject EncodingUTF-8

通过以上步骤,你应该能够在PyCharm中正确显示日志文件而不会出现乱码问题。

结论

通过本文的介绍,你学会了如何创建一个高效的日志工具,将日志同时输出到文件和控制台,并确保日志文件保存在项目目录的 log 文件夹中。我们还解决了在PyCharm中查看日志文件乱码的问题。希望这些内容对你的项目开发有所帮助!

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

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

相关文章

【ajax基础02】URL详解

目录 一:什么是URL 二:URL组成 协议 ​编辑 域名(在url中必须写) 资源路径 三:URL查询参数 定义: 语法格式: 如何利用axios实现特定数据查询: 语法格式: 案例&#xff1a…

【耐水好】强耐水UV胶水它的粘接强度和普通UV胶水比如何呢

【耐水好】强耐水UV胶水它的粘接强度和普通UV胶水比如何呢 强耐水UV胶水的粘接强度与普通UV胶水相比,具有显著的优势。以下是详细的比较和归纳: 固化方式: 两者都是通过紫外线(UV)照射进行固化,但强耐水UV…

2024年全球架构师峰会(ArchSummit深圳站)

前言 ArchSummit全球架构师峰会是极客邦科技旗下InfoQ中国团队推出的重点面向高端技术管理者、架构师的技术会议,54%参会者拥有8年以上工作经验。 ArchSummit聚焦业界强大的技术成果,秉承“实践第一、案例为主”的原则,展示先进技术在行业中的…

程序员学CFA——经济学(三)

经济学(三) 总产出、价格水平和经济增长总产出、总收入和总支出总产出、总收入和总支出的概念及联系国内生产总值国内生产总值(GDP)的定义GDP的衡量方法GDP的相关概念GDP的核算方法 总需求、总供给和市场均衡总需求总需求及其假设…

Netty中Reactor线程的运行逻辑

Netty中的Reactor线程主要干三件事情: 轮询注册在Reactor上的所有Channel感兴趣的IO就绪事件。 处理Channel上的IO就绪事件。 执行Netty中的异步任务。 正是这三个部分组成了Reactor的运行框架,那么我们现在来看下这个运行框架具体是怎么运转的~~ 这…

设计模式-结构型-06-桥接模式

1、传统方式解决手机操作问题 现在对不同手机类型的不同品牌实现操作编程(比如:开机、关机、上网,打电话等),如图: UML 类图 问题分析 扩展性问题(类爆炸):如果我们再…

Zygote进程的理解

Zygote进程是安卓系统的一个重要进程,由init进程创建而来;另外系统里的重要进程(system_server等)都是由zygote进程fork的,所有的app进程也是由zygote进程fork的。 一、C 里的fork函数 fork是Linux里面创建子进程的函…

电池荷电状态估计SOC?电池管理系统

一、背景 电池荷电状态(SOC, State of Charge)估计是电池管理系统(BMS, Battery Management System)的关键功能之一,对于确保电池的安全高效运行至关重要,特别是在电动车、储能系统以及便携式电子设备等领…

LCL滤波器并网逆变器双闭环控制系统仿真

并网逆变器通常采用L滤波器,虽然结构和控制简单,但是随着功率级别的增加,体积重量增大等问题也日益突出。为了解决这个问题,人们开始使用LCL滤波器,这种滤波器在功率较大的场合表现出色。 无源滤波器,又称…

神经网络模型---ResNet

一、ResNet 1.导入包 import tensorflow as tf from tensorflow.keras import layers, models, datasets, optimizersoptimizers是用于更新模型参数以最小化损失函数的算法 2.加载数据集、归一化、转为独热编码的内容一致 3.增加颜色通道 train_images train_images[...,…

Linux 系统图像化编程GTK入门

环境前期准备 演示环境:Windows 11 Ubuntu 22.04.4 VS Code 前提条件:1、Windows 11 子系统Ubuntu 22.04.4 已经安装图形化界面,如果没有安装请参考文章: windows11子系统Ubuntu 22.04.4子安装图形化界面 2、Ubuntu 22.04.4…

C语言笔记第16篇:编译和链接

1、翻译环境和运行环境 在ANSI C的任何一种实现中,存在两个不同的环境。 第1种是翻译环境,在这个环境中源代码被转换为可执行机器指令(二进制指令) 第2种是执行环境,它用于实际执行代码 2、翻译环境 那翻译环境是怎…

数据资产管理的未来趋势:洞察技术前沿,探讨数据资产管理在云计算、大数据、区块链等新技术下的发展趋势

一、引言 随着信息技术的飞速发展,数据已成为企业最重要的资产之一。数据资产管理作为企业核心竞争力的关键组成部分,其发展趋势和技术创新受到了广泛关注。特别是在云计算、大数据、区块链等新技术不断涌现的背景下,数据资产管理面临着前所…

【凤凰房产-注册安全分析报告-缺少轨迹的滑动条】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…

2024 端午节巽寮湾游玩记录

2024 端午节巽寮湾游玩记录 文章目录 2024 端午节巽寮湾游玩记录一、前言二、巽寮湾游玩行程1、三天衣食住行2、主要图片: 三、其他1、小结2、巽寮湾游玩建议3、感慨 一、前言 时间总是过得很快,只要你活着时间就会不停往前走。 所以你以后的路其实都是…

外卖APP开发详解:从同城O2O系统源码开始

近期,从事软件开发的小伙伴们都在讨论外卖APP,热度非常之高,所以小编今天将与大家一同探讨同城O2O系统源码、外卖APP开发。 一、外卖APP开发的前期准备 了解目标用户的需求,分析竞争对手的优劣势,明确自身的市场定位。…

如何在Vue3中处理异步API调用并更新表单数据(附Demo)

目录 前言1. 问题所示2. 知识分析3. 实战 前言 从实战问题中剖析知识点 1. 问题所示 执行Vue3数据的时候&#xff0c;终端输出的data如下所示 Promise {<pending>} [[Prototype]] : Promise [[PromiseState]] : "fulfilled" [[PromiseResult]] : Array(…

【Unity拖拽物体】实现对点中的3D物体进行拖拽的功能

场景结构&#xff0c;两个普通模型 第一种 脚本所挂载的物体才可以被拖拽 【PC鼠标版本】 using UnityEngine;// 这个脚本实现了&#xff0c;本脚本所在的游戏物体能够被拖拽 public class DragObjectT : MonoBehaviour {private Vector3 screenPoint; // 存储物体在屏幕上的位…

python GUI开发: tkinter菜单创建,记事本和画图软件综合项目的实战演练

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

百度智能云推出智能运维工具,云助手让云服务器运维更简单

为了提升云服务器执行命令的效率&#xff0c;百度智能云发布了 SmartTerm 远程连接终端。不止于此&#xff0c;为了更加极致地提升运维效率&#xff0c;我们又推出了「云助手」这款轻量快捷的运维工具。 ​ 只有做过云服务器运维的人才知道管理上万台云服务器有多崩溃。在海量…