第三方庫:loguru,自定義日志封裝模塊


  • 安裝方式:
pip install loguru
  • 簡單示例:
from logrur import logger
logger.debug('Hello logger')

# 2020-11-09 17:11:25.015 | DEBUG    | __main__:<module>:1 - Hello loguru.
  • logger.add方法配置輸出格式
from loguru import logger

logger.add("file.log",  # 日志輸出到指定文件
            format="{time} {level} {message}",   # 配置格式 
            filter="",    # 過濾器
            level="INFO"   # 過濾級別
          )  
logger.info("這是一條info日志")

# 2019-03-14T20:01:25.392454+0800 INFO 這是一條info日志
  • format參數時間格式化:
logger.add("file.log", format="{time:YYYY-MM-DD at HH:mm:ss} | {level} | {message}")
  • 文件管理方式
logger.add("file_1.log", rotation="500 MB")    # 文件過大就會重新生成一個文件
logger.add("file_2.log", rotation="12:00")     # 每天12點創建新文件
logger.add("file_3.log", rotation="1 week")    # 文件時間過長就會創建新文件

logger.add("file_X.log", retention="10 days")  # 一段時間后會清空

logger.add("file_Y.log", compression="zip")    # 保存zip格式
  • 其他參數
logger.add("somefile.log", enqueue=True)  # 異步寫入

logger.add("somefile.log", serialize=True)  # 序列化為json




為了使用方便,自定義二次封裝logrur

import os
import datetime
from loguru import logger


class Logings:
    __instance = None
    # 文件名稱,按天創建
    DATE = datetime.datetime.now().strftime('%Y-%m-%d')

    # 項目路徑下創建log目錄保存日志文件
    logpath = os.path.join(os.path.dirname(os.getcwd()), "logs")  # 拼接指定路徑
    # 判斷目錄是否存在,不存在則創建新的目錄
    if not os.path.isdir(logpath): os.makedirs(logpath)

    logger.add('%s\%s.log' % (logpath, DATE),   # 指定文件
               format="{time:YYYY-MM-DD HH:mm:ss}  | {level}> {elapsed}  | {message}",
               encoding='utf-8',   
               retention='1 days',  # 設置歷史保留時長
               backtrace=True,  # 回溯
               diagnose=True,   # 診斷
               enqueue=True,   # 異步寫入
               # rotation="5kb",  # 切割,設置文件大小,rotation="12:00",rotation="1 week"
               # filter="my_module"  # 過濾模塊
               # compression="zip"   # 文件壓縮
              ) 

    def __new__(cls, *args, **kwargs):
        if not cls.__instance:
            cls.__instance = super(Logings, cls).__new__(cls, *args, **kwargs)
        return cls.__instance

    def info(self, msg, *args, **kwargs):
        return logger.info(msg, *args, **kwargs)

    def debug(self, msg, *args, **kwargs):
        return logger.debug(msg, *args, **kwargs)

    def warning(self, msg, *args, **kwargs):
        return logger.warning(msg, *args, **kwargs)

    def error(self, msg, *args, **kwargs):
        return logger.error(msg, *args, **kwargs)

    def exception(self, msg, *args, exc_info=True, **kwargs):
        return logger.exception(msg, *args, exc_info=True, **kwargs)


if __name__ == '__main__':
    logs = Logings()

    def func(a, b):
        return a/b

    def my(z, c):
        try:
            func(z,c)
        except ZeroDivisionError:
            logs.exception('...........')
    my(5,0)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM