历史

有个很奇怪的现象,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")

更多

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


↙↙↙阅读原文可查看相关链接,并与作者交流