python学习自制彩色,自定义格式日志打印制作LLoghelper

news2024/9/29 5:27:27

python学习自制彩色,自定义格式日志打印LLoghelper

python print(xxx)
打印出来只显示白色黑底,没有时间,路径,不同的控制台颜色,对一个没有错误崩溃的python项目来说这样调试起一些逻辑非常不方便
在这里插入图片描述
目标:
1.带颜色,路径,时间,自定义格式等的
2.把原生的print也重写了,默认让它带有格式

1.导入logging和colorlog支持

import logging
import colorlog

log_format = colorlog.ColoredFormatter(
        "[%(message_log_color)s%(asctime)s %(pathname)s:%(lineno)d%(reset)s] %(log_color)s%(message)s",
        log_colors={
            "DEBUG": "cyan",
            "INFO": "green",
            "WARNING": "yellow",
            "ERROR": "red",
            "CRITICAL": "white,bg_red",
        },
        secondary_log_colors={
            "message": {
                "DEBUG": "blue",
                "INFO": "blue",
                "WARNING": "blue",
                "ERROR": "blue",
                "CRITICAL": "blue",
            },
        },
        reset=True,  # 重置颜色
        style="%",
    )
logging.basicConfig(
            filename='output.log', 
            level=logging.DEBUG, 
            encoding='utf-8',
            format='[%(asctime)s %(pathname)s:%(lineno)d] %(message)s'
            )
log = logging.getLogger()
console_handler = logging.StreamHandler()
console_handler.setFormatter(log_format)
log.addHandler(console_handler)

log.info("This is a test.")
log.warning("This is a warning.")
log.error("This is an error.")
log.critical("This is a critical error.")
log.debug("This is a debug message.")
print("This is a normal message.")

在这里插入图片描述secondary_log_colors

secondary_log_colors 这个可以在内部配置第二种颜色,

"[%(message_log_color)s%(asctime)s %(pathname)s:%(lineno)d%(reset)s] %(log_color)s%(message)s"

这里作为标题时间,路径格式 %(message_log_color)s xxxx......%(reset)s color—reset之间就可以定义不同的颜色显示了

2.print重置格式化

import builtins #print内置
import inspect #inspect.stack()
import sys
from datetime import datetime

builtins 是print 内置
inspect 可以inspect.stack() 追踪错误信息等的
datatime 时间信息

#字符串颜色代码
COLOR_CODES = {
    "red": "\033[31m",
    "green": "\033[32m",
    "yellow": "\033[33m",
    "blue": "\033[34m",
    "magenta": "\033[35m",
    "cyan": "\033[36m",
    "reset": "\033[0m",
} #字符串颜色代码

def my_print(*args, sep=' ', end='\n', file=sys.stdout, flush=False):
    # 获取调用者的栈帧信息
    stack = inspect.stack()
    # 调用者信息在栈中的位置通常是第二个元素(索引为1)
    if len(stack) > 1:
        # 获取调用者的文件名和行号
        caller_frame = stack[1]
        filename = caller_frame.filename
        lineno = caller_frame.lineno
        # 为了简洁,我们只显示文件名和行号的一部分
        filename = filename.split('/')[-1]  # 假设路径是以'/'分隔的
        # 获取当前时间
        current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        # 将文件路径和行号添加到输出中
        head = (f"[{current_time} {filename}:{lineno}] ",)
        color_head = (f"{COLOR_CODES['blue']}[{current_time} {filename}:{lineno}] {COLOR_CODES['green']}",)
        color_args = color_head + args
        args = head + args

    # 将输出内容转换为字符串
    output = sep.join(map(str, args)) + end
    color_output = sep.join(map(str, color_args)) + end + COLOR_CODES["reset"]

    # 写入到标准输出
    file.write(color_output)
    if flush:
        file.flush()
    # 同时将内容写入到日志文件
    with open("output.log", 'a', encoding='utf-8') as logfile:
        logfile.write(output)

# 保存原始的 print 函数
original_print = builtins.print
# 重写 print 函数
builtins.print = my_print

log.info("This is a test.")
log.warning("This is a warning.")
log.error("This is an error.")
log.critical("This is a critical error.")
log.debug("This is a debug message.")
print("This is a normal message.")

运行结果
在这里插入图片描述看到了自己的颜色配置完成!

3.制作pypi包 pip install LLoghelper

步骤 1: 构建和发布你的包

可以用git bash工具执行

安装打包工具:

如果你还没有安装 setuptools 和 wheel,可以通过以下命令安装:

pip install --upgrade setuptools wheel

创建源码包:

使用 setup.py 创建源码包:

python setup.py sdist bdist_wheel

这将在 dist/ 目录下生成 .tar.gz 和 .whl 文件。

安装 twine:

twine 是一个用于上传 Python 包的工具:

pip install twine

上传到 PyPI:

使用 twine 上传你的包到 PyPI:

twine upload dist/*

你可能需要输入你的 PyPI 用户名和密码。如果你还没有 PyPI 账户,需要先注册一个。

注意:这里需要windows power shell 执行,git bash会卡死

最后测试

pip install LLoghelper

完美收官!

有需要的可以直接
pip install LLoghelper

导入:

from LLoghelper.log_helper import log, logger

还可以设置是否使用log,和print重写:

logger.set_log_enable(True, False) #控制日志log, print 是否可以打印  print=false恢复原样

即可使用!谢谢观赏!

github地址:https://github.com/atgczcl/LLoghelper.git
PyPi地址:https://pypi.org/project/LLoghelper/

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

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

相关文章

下载mmcv或者mmcv-full第三方库失败(已解决)

一、问题描述 首先跑yolov8改进的时候要下载mmcv-full,直接在环境里pip install一直失败,或者下载了之后运行代码说不存在程序啥的,也是没下对的意思。 mmcv或者说mmcv-full第三方库下载的版本是有要求的,要和自己的pytorch版本对…

解决maven java.rmi.ConnectException: Connection refused to host: 127.0.0.1 错误

highlight: gruvbox-dark theme: cyanosis 你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,…

2.2 Python变量与数据类型

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: 工💗重💗hao💗:野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题.…

好用到哭的翻译工具,百度翻译领衔,2024新宠来袭!

在全球化的浪潮中,语言障碍已经越来越不是问题了,翻译工具就像是我们的文化差异跨越助手。今天,我们就来聊聊几款翻译界的佼佼者,它们各有千秋,让我们的多语言之旅变得更加轻松。百度翻译算是其中的佼佼者,…

【机器学习】BP神经网络正向计算

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 BP神经网络正向计算1. 引言2. BP神经网络结构回顾3. 正向计算的基本原理4. 数学…

微信小程序通过code换取手机号

一、调用小程序验证组件,这两个组件都是可以文档地址。 二、首先还是得先拿到code (1)、必须在手机端去执行,开发者工具获取不到code。解决办法:将拿到的code在页面上渲染出来在复制一下就好了。 (2&#…

文件上传漏洞(一,漏洞简介及简单利用)

本文仅作为学习参考使用,本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 一,文件上传漏洞简介。 1,什么是文件上传漏洞。 文件上传漏洞,是指web应用允许用户上传诸如:木马,病毒,执行…

红酒与北美烧烤:自由的味蕾之旅

在繁星点点的夜空下,一场红酒与北美烧烤的盛宴悄然展开。这不是简单的味觉碰撞,而是一场自由的味蕾之旅,洒派红酒(Bold & Generous)与北美烧烤的结合,如同诗与远方的交汇,温柔而引人入胜。 …

产品经理-​如何做需求的优先级排序和版本规划(30)

如何做需求的优先级排序?如何做产品的版本规划?思考逻辑是什么? 需求优先级分析、产品版本规划 需求的分析和管理是产品经理的最核心技能,没有之一 作为一名产品经理,工作的产出物就是需求文档,在整个需求文…

制造知识普及(八)--企业内部物料编码(IPN)与制造商物料编码(MPN)

1、什么是物料编码 通常情况下,物料编码分两种,一种是企业内部物料编码(IPN),由于在企业研发制造和生产中确认物料唯一性的,用于承载设计参数要求和技术要求。另一种是制造商物料编码(MPN&…

【扒代码】ope.py

文件目录: 引用方式 if not self.zero_shot: # 非零样本情况下,计算边界框的宽度和高度 box_hw torch.zeros(bboxes.size(0), bboxes.size(1), 2).to(bboxes.device) box_hw[:, :, 0] bboxes[:, :, 2] - bboxes[:, :, 0] # 宽度 box_hw[:, :, 1] bbox…

html+css 实现hover中间展开背景

前言:哈喽,大家好,今天给大家分享htmlcss 绚丽效果!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目…

kickstart自动安装脚本制作并搭建pxe网络环境

目录 准备工作: 安装图形化kickstart自动安装脚本的工具 安装httpd 搭建DHCP服务 搭建pxe网络安装环境,实现服务器自动部署 pxe原理: 安装所需软件包 测试: 准备工作: 1、准备一台rhel7的主机,并开启主机的图形。 …

关于Git使用不成功的问题解决方案记录

关于Git使用不成功的问题解决方案记录 前言代理连接不成功总结 前言 项目中建立了Git小仓库,但是在使用中出现了无法push新的代码,显示端口出现问题,发现网站和端口都没有问题,可以打开网站。但是还是连接失败,无法下…

快速打造艺术作品,AI绘画软件超神奇

越来越多的人开始尝试使用人工智能技术来创作艺术作品。而其中最受欢迎的一种方式就是使用AI绘画软件。 AI绘画软件是一种能够帮助用户快速生成高质量的艺术作品的工具。它可以根据用户的输入,自动创建出各种风格各异的作品,如卡通人物、风景画等。 Aic…

Katalon Studio 使用教程(小白基础版)

如果你还没有安装,可以点击下方安装教程链接,里面有详细的安装链接与教程: Katalon Studio 保姆级安装教程-CSDN博客 安装好后,应当是这样的界面。本篇从安装好后开始讲。 katalon的使用很简单,三步就能实现一个完整的…

谷粒商城实战笔记-一键执行项目SQL脚本

文章目录 代码结构概述详细解释1. 主方法 (main 方法)2. 执行SQL脚本的方法 (executeSqlScript 方法)3. 执行SQL命令的方法 (executeSqlCommand 方法) 注意事项 课程提供了项目的初始化脚本。 但是要手动逐个建库,执行脚本,还是比较费时间的。 特别是因…

HCIP学习 | OSPF---LSA限制、不规则区域、附录E、选路

目录 Days06(24.8.8)OSPF---LSA限制、不规则区域、附录E、选路 特殊区域 stub 区域, 末节区域 Totally stub :完全的末节区域 NSSA区域:(not so stub area) 非完全末节区域 完全的非完全的末节区域: …

Python 函数(1)

1、函数 函数是带名字的代码块,用于完成具体的工作。要执行函数定义的特定义务,可调用该函数。当需要再程序中多次执行同一项任务时,无需反复编写完成该任务的代码,只需要调用该任务的函数,让其运行即可。 1.1、定义…

【mars3d】GraphicLayer遍历添加数据,正确拿到数据

import * as mars3d from "mars3d"export let map // mars3d.Map三维地图对象 export let graphicLayer // 矢量数据图层 export const mapOptions {scene: {center:{"lat":30.577085,"lng":116.885511,"alt":45203.5,"heading&…