logzero—讓python日志輸出更簡單容易的模塊
logzero是python的一個(gè)日志模塊,它讓日志輸出更加的便捷,使用起來更加高效,而且提供了一些特別小巧且實(shí)用的功能,極大的方便了在項(xiàng)目里處理日志,使用pip安裝
pip install logzero
下面詳細(xì)介紹logzero的用法
1. 在終端根據(jù)日志級別輸出帶有顏色的日志
在終端輸出日志時(shí),logzero可以根據(jù)日志的級別顯示不同的顏色,方便在查看日志時(shí)區(qū)分
from logzero import logger
logger.debug("hello")
logger.info("info")
logger.warning("warn")
logger.error("error")
終端顯示?
2. 輸出異常信息
程序在捕獲異常后,如果想在日志里輸出詳細(xì)的異常信息,通常使用traceback模塊的format_exc方法來獲取異常信息,然后在日志中輸出,使用logzero后,就可以省去format_exc方法的調(diào)用過程,一步到位,節(jié)省了代碼
try:
raise Exception("this is a demo exception")
except Exception as e:
logger.exception(e)
logzero 提供了一個(gè)exception方法,可以輸出Exception對象的詳細(xì)信息?
是不是特別方便呢
3. 輸出json格式的日志
使用logzero,可以快速的輸出json格式的日志
import logzero
from logzero import logger
logzero.json() # 輸出json格式日志
def test():
logger.info("json格式")
test()
日志內(nèi)容
{
"asctime": "2021-10-18 21:19:41,312",
"filename": "hello_world.py",
"funcName": "test",
"levelname": "INFO",
"levelno": 20,
"lineno": 7,
"module": "hello_world",
"message": "json格式",
"name": "logzero_default",
"pathname": "/Users/kwsy/PycharmProjects/class21/basic/hello_world.py",
"process": 64653,
"processName": "MainProcess",
"threadName": "MainThread"
}
日志中的字段是模塊默認(rèn)的,你可以調(diào)用formatter函數(shù)重新調(diào)整這些字段。使用json方法,是為默認(rèn)的logger開啟json格式,此外還可以使用setup_logger(json=True)方法,為你自定義的logger開啟json格式日志輸出
import logzero
from logzero import logger, setup_logger
mylogger = setup_logger(json=True) # 自定義的logger
mylogger.info("info")
logger.info("默認(rèn)logger")
自定義的mylogger是按照json格式輸出日志,而默認(rèn)的logger則使用默認(rèn)格式。
4. 更方便的輸出到文件中
import logzero
from logzero import logger
logzero.logfile('./main.log', disableStderrLogger=True)
logger.info("info")
調(diào)用logfile函數(shù),可以指定日志輸出的文件,disableStderrLogger設(shè)置為True,日志就不會在終端里輸出了。上面的示例是為默認(rèn)logger設(shè)置輸出文件,下面給一個(gè)自定義logger的例子
import logzero
from logzero import logger, setup_logger
sys_logger = setup_logger(name='sys', logfile='./sys.log', level=logzero.INFO, disableStderrLogger=True)
user_logger = setup_logger(name='user', logfile='./user.log', level=logzero.INFO, disableStderrLogger=True)
user_logger.info('user info')
user_logger.warn('user warn')
user_logger.error('user error')
sys_logger.info('sys info')
sys_logger.warn('sys warn')
sys_logger.error('sys error')
上面的代碼會生成兩個(gè)日志文件,level設(shè)置為INFO,按照DEBUG < INFO < WARNING < ERROR < CRITICAL的順序,只有大于等于INFO的日志才會被輸出。
5. 生成rotating 日志
一旦指定了logfile參數(shù),創(chuàng)建的handler就是RotatingFileHandler類型的,但需要設(shè)置maxBytes參數(shù),否則不會滾動輸出。
import logzero
from logzero import logger, setup_logger
user_logger = setup_logger(name='user', logfile='./user.log',
level=logzero.INFO, fileLoglevel=logzero.WARN,
disableStderrLogger=True, maxBytes=60000, backupCount=3)
user_logger.info('user info')
user_logger.warn('user warn')
user_logger.error('user error')
maxBytes 設(shè)置文件大小,backupCount設(shè)置保留文件個(gè)數(shù),其余的將會被刪除。
