有个很奇怪的现象,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 就是属于这种级别的库。
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")
还有更多的内容等着去发现。