通用技术 Python 中的日志库 logzero

codeskyblue · February 01, 2018 · Last by 红客联盟 replied at March 27, 2020 · 4143 hits

历史

有个很奇怪的现象,Python 已经发展了 10 几年了,系统库虽然功能强大,但是出奇的难用。比如说 urllib、urllib2 库。好在总是会有变革之士,挺身而出,用键盘做武器,创造出无数出名的库,比如 requests 库一出世,一个照面就将 urllib 和 urllib2 这两大资深系统库瞬秒。我这次向大家介绍的是另外一个可以瞬秒 logging 库的日志库 logzero。

谷歌搜索python log,清一色的都是介绍 logging 模块的,可是这个库实在是难用。我举几个例子

import logging
logging.info("Hello")

结果是什么输出都没有

import logging
logging.warn("warn")
# 输出: WARNING:root:warn

这次是有输出了,但是这个简洁的输出,有个毛线用处,跟直接print("warn")有什么区别

除非你掌握了 logging 中非常高深的技巧,否则根本玩不转这个库

import logging
logging.basicConfig(
    format='%(asctime)s %(levelname)-8s %(message)s',
    level=logging.INFO,
    datefmt='%Y-%m-%d %H:%M:%S')
logging.info("an info message")
# 输出: 2018-02-01 13:22:21 INFO     an info message

还有更复杂的方法我就不写了。下面说下 logzero 的用法

PS: 本来想自己写个库来着,还好我没放弃寻找,终于被我找到了

logzero 的使用

用起来简单的库,文档写起来也容易。logzero 就是属于这种级别的库。

安装

pip install -U logzero

使用

from logzero import logger

# These log messages are sent to the console
logger.debug("hello %s", "world")
logger.info("info")
logger.warning("warn")
logger.error("error")

# This is how you'd log an exception
try:
    raise Exception("this is a demo exception")
except Exception as e:
    logger.exception(e)

如果文件名是demo.py,输出将会是下图

输出还有颜色,文件 + 行号。比 logging 默认的输出不知道强了多少条街道。

还有一些更高级的用法

日志切割

import logzero
from logzero import logger

# Setup rotating logfile with 3 rotations, each with a maximum filesize of 1MB:
logzero.logfile("/tmp/rotating-logfile.log", maxBytes=1e6, backupCount=3)

# Log messages
logger.info("This log message goes to the console and the logfile")

设置全局日志 Level

import logzero
import logging
from logzero import logger

logzero.loglevel(logging.INFO)
logger.debug("hello") # 不显示
logger.info("info") # 显示

定制日志实例

from logzero import setup_logger
logger1 = setup_logger(name="mylogger1", logfile="/tmp/test-logger1.log", level=logging.INFO)
logger2 = setup_logger(name="mylogger2", logfile="/tmp/test-logger2.log", level=logging.INFO)

# By default, logging
logger1.info("info for logger 1")
logger2.info("info for logger 2")

更多

还有更多的内容等着去发现。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 8 条回复 时间 点赞

目前项目在用 logbook,好像功能 比 logzero 更强大点。😀

0x7C00 回复

看起来挺牛逼的样子呀 http://logbook.readthedocs.io

所以 python 一直在进步

正想换个日志的,今晚试试先哈哈

simple 专栏文章:[精华帖] 社区历年精华帖分类归总 中提及了此贴 13 Dec 14:44
codeskyblue 专栏文章:2018年 终总结 中提及了此贴 18 Feb 10:26

loggru 尝试哈

仄言 回复

嗯,logrus 功能好强大,多谢科普。尤其是记录 trace 的时候真的猛

同样推荐 loguru

codeskyblue 回复

你刚说的 logging 的缺点,不能输出异常,其实早就能输出了,logging 本身就有 logger.exception 方法,至于颜色,锦上添花罢了,没发现有特别出彩的地方,缺点和优点不明显啊,应该是没深入探究

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up