【Python】发布一个简单好用的日志记录器bestlog

2023-11-15

需求

日志是非常重要的一个东西,我们往往习惯于在开发一个新项目的第一行代码时,就用 logging.info 代替 print,随时保持记录的好习惯,等代码上线以后也无需修改替换那些 print,直接开跑,有了完善的日志,才便于分析生产环境中遇到的异常问题。

python的【logging】已经很好用了,但是对于新手和非python为主语言的开发者来说,第一次使用它,配置起来还是麻烦了点。

一个Logger的初始化,还需要一个Handler和一个Formatter,如果你想节约了解它的时间,那么最简单的方法就是使用【bestlog】

【bestlog】项目地址:https://github.com/encoderlee/bestlog

其实我原本想命名为【easylog】,更符合它的定义,奈何这个名字已经在pypi上面存在,只能换一个名字,再尝试构思了多个名字并且发现命名冲突后,只得取了这个名字【bestlog】

【bestlog】是什么

简单来说,它是一个预先配置好的Logger,开箱即用,你不需要管标准库【logging】中的Logger怎么配置,它已经帮你配置好了最常见的一种用法,可以满足80%的小型项目应用场景。

由【bestlog】生成的这个Logger具有如下特性:

  1. 把日志内容同时输出到文件和stdout,每行日志有具体时间、level、tag、和消息内容

  2. 每天的日志自动切割成一个独立的文件(否则几十天的日志在一个文件里,打开文件都头疼)

  3. 根据设定,自动清理日期过老的日志(非常重要,生产环境中,有的人往往不注意这点,突然有一天服务器就死机了,原来是日志文件过多,一年多的日志都堆在那里,可用磁盘空间都为0了)

【bestlog】怎么用

先从pypi安装【bestlog】

pip install bestlog

只需要一行代码就可以得到令我们满意的Logger

from bestlog import logger

log = logger.get("test")

def main():
    log.info("what the fuck")

if __name__ == '__main__':
    logger.init("test")
    main()

日志输出效果:

[2022-11-16 21:37:06,032][INFO]: what the fuck

同时我们可以在默认路径下(当前目录的logs文件夹),可以找到对应的日志文件:
在这里插入图片描述
而且日志文件会自动按天分割哦
在这里插入图片描述

灵感

之所以发布【bestlog】,是因为在我们的多个Python项目中,习惯于使用 logging.info 代替 print,所以每个项目都带了一个名为【logger.py】的模块,但是每次都把这个模块拷贝来拷贝去的,非常麻烦,于是我们想到了发布到pypi上,方便自己使用,也方便大家。

配置

from bestlog import logger
import logging

logger.default_log_path = "/var/log/test/"
logger.default_log_level = logging.DEBUG
logger.default_backup_days = 30

log = logger.get("test")

def main():
    log.debug("what the fuck")

if __name__ == '__main__':
    logger.init("test")
    main()

你可以指定日志保存的路径,日志默认的Level,日志默认的保留天数(默认为0,无限制天数)

当然,这些参数不仅仅可以设置全局默认值,也可以在初始化Logger的时候,即调用 logger.init() 的时候,通过 init() 的参数来指定,这样可以做到每个 Logger 不一样的配置,输出到不同的目录。

Tag

from bestlog import logger

class Worker:
    def __init__(self, name):
        self.name = name
        self.log = logger.get("test", name)

    def do_something(self):
        self.log.info("hello")

def main():
    worker1 = Worker("bob")
    worker2 = Worker("jack")
    worker1.do_something()
    worker2.do_something()

if __name__ == '__main__':
    logger.init("test", tag = True)
    main()

日志输出效果:

[2022-11-16 21:42:49,469][INFO][bob]: hello
[2022-11-16 21:42:49,470][INFO][jack]: hello

【bestlog】还有一个Tag功能,主要用于多线程、多任务、多账号的程序,用于在日志中区分,是哪个线程、哪个任务、哪个账号出了问题。

在这里插入图片描述
这点在我们的一些链游开源项目中可以看到它的用途,因为一个脚本运行起来以后,需要处理上百个不同的账号,有了 tag 我们才好从日志中区分,是哪个账号,出了什么问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Python】发布一个简单好用的日志记录器bestlog 的相关文章

随机推荐

  • JVM--基础--27.2--工具--VisualVM--远程连接

    JVM 基础 27 2 工具 VisualVM 远程连接 1 准备工作 准备工作是为了测试使用 1 1 代码地址 https gitee com DanShenGuiZu learnDemo tree master visualvm lea
  • c#读取html 表格,c# – 如何将文本文件读取到DataTable

    我想从txt文件中提取数据并将其放入DataTable中 txt文件中的内容采用以下格式 sometext1 sometext2 sometext3 sometext4 sometext5 sometext6 sometext7 somet
  • java获取实时天气预报数据

    数据是从 www webxml com cn上免费获取的 有需要也可以去购买服务 api可以去该网站查看 这里用的是GET方式请求 每个城市citycode 也需要从这个网站上面去下载 解析xml用到的是xwork core 2 3 15
  • 月薪快6万了!

    和一位本科师兄约饭 比我大一级 当年他的成绩很好 完全能够保送更好高校的研究生 但在大家纷纷从众去读研的时候 他选择了直接工作 去了西二旗一家大厂 具体哪家这里就不明说了 圈子很小 很容易被定位 我问了下他目前的薪资情况 他说了几个数字 现
  • 第一章矩阵及其应用

    矩阵逆运算规律 由于矩阵运算默认不满足交换律 即AB BA 但若存在一钟矩阵B 满足AB BA 就满足了交换律 单位矩阵就是特殊的一种AB BA 单位矩阵定义是这样的 lt 设A为n阶方阵 则A aE aE A aA gt 也就是说 数量阵
  • Oracle 的drop table if exists功能

    Mysql 创建表之前判断表是否存在 如果存在则删除已有表 DROP TABLE IF EXISTS SH PLACARD INFO Oracle 创建表之前判断表是否存在 如果存在则删除已有表 declare num number beg
  • 如何使用JMeter进行压力测试

    一 前期准备 首先需要在官网下载jmeter 下载完之后打开bin目录下的jmeter bat 在jmeter bat中对所要压测的接口进行压力测试 二 具体步骤 1 创建线程组 在线程组中设置线程的个数 持续时间和循环次数 如下图所示 2
  • PMI632

    1 目录 drivers power supply qcom qpnp smb5 c charger driver drivers power supply qcom smb5 lib c 依赖的SMB library arch arm64
  • CTF_Web:php伪随机数mt_rand()函数+php_mt_seed工具使用

    CTF Web php伪随机数mt rand函数漏洞 0x00 问题描述 0x01 mt rand函数 0x02 CTF例题 0x03 php mt seed工具使用 0x04 参考文章 0x00 问题描述 最近在题目练习的时候遇到了一个伪
  • Gulp入门使用(一)

    Gulp入门使用教程 Gulp的简介 为什么是Gulp 安装Gulp 创建Gulp项目 目录结构 第一个Gulp任务 Gulp执行预处理 Node中的通配符 监听Sass文件 使用Browser Sync自动刷新 Gulp的简介 gulp
  • 开学c语言测试,初学c语言之开学第一次打卡

    近日开学 忙了好多事 因此隔了好久才写了这篇博客 话少 就直接进入正题了 数数字问题 这是题目 输入一个整数 输出每个数字对应的拼音 当整数为负数时 先输出fu字 十个数字对应的拼音如下 0 ling 1 yi 2 er 3 san 4 s
  • 签约多方共建石嘴山智慧康养新模式

    5月13日 百度智能云与石嘴山市民政局 中国电信股份有限公司石嘴山分公司 中国银行股份有限公司石嘴山市分行 石嘴山市青鸟颐居养老服务有限公司在宁签订 石嘴山市智慧康养战略合作协议 将发挥各自优势 合力推进智慧康养产业高质量发展 提高智慧养老
  • 解决 ios 输入框属性--placeholder--不显示

    在我们写移动端项目时 会发现在IOS手机上 部分输入框的默认文字会隐藏 在此提供一套解决方法 此方法已经历过实际项目的测试 可放心的应用于实战 将此段js代码放置在项目的公共js文件中即可 if placeholder in documen
  • 海湾汉字编码表全部_汉字编码简明对照表

    汉字编码简明对照表 说明 1 下列汉字取自国标 GB 2312 80 中的分级与排列内容 包含所有的第一级汉字和第二级汉字中的常用部分 2 第一级汉字 16 55区的汉字 以拼音字母为序进行排列 同音字以笔形顺序横 竖 撇 捺 折为序 起笔
  • 生成式对抗网络(GAN)-(Generative Adversarial Networks)算法总结(从原始GAN到....目前)

    本文将按时间顺序总结gan的paper 非所有 会挑选个人认为比较重要的 并将参考其它博客 会给出链接 如有侵权 请私信删除 更新于 19 IS 可以反应图像的生成质量 越大越好 FID 则会更假注重生成的多样性 越小越好 IS score
  • mysql评审_第3章 代码检查、走查与评审

    代码检查与走查 代码检查 走查以及可用性测试是三种主要的人工测试方法 人工测试技术在查找错误方面非常有效 应该在程序开始编码之后 基于计算机的测试开始之前使用这些方法 本章主要介绍的是代码检查与走查的相似之处 而它们的不同之处将在后续章节中
  • Apache和Tomcat

    一 Apache和Tomcat的区别 Apache只是一个Web服务器 可以作为独立的web服务器来运行 不过只支持静态网页 如 asp PHP cgi jsp 等动态网页的就显得无能为力 Tomcat也可以作为独立的web服务器来运行 但
  • 什么是docker?docker有什么优缺点?

    Docker的思想来自于集装箱 集装箱解决了什么问题 在一艘大船上 可以把货物规整的摆放起来 并且各种各样的货物被集装箱标准化了 集装箱和集装箱之间不会互相影响 那么我就不需要专门运送水果的船和专门运送化学品的船了 只要这些货物在集装箱里封
  • UE4 C++ 编辑器模式下属性被修改时触发对应事件

    pragma once include CoreMinimal h include GameFramework Actor h include TestActors generated h UCLASS class TESTACTOR AP
  • 【Python】发布一个简单好用的日志记录器bestlog

    需求 日志是非常重要的一个东西 我们往往习惯于在开发一个新项目的第一行代码时 就用 logging info 代替 print 随时保持记录的好习惯 等代码上线以后也无需修改替换那些 print 直接开跑 有了完善的日志 才便于分析生产环境