對比使用logging模塊手動封裝使用,配置復雜麻煩,發現一個loguru模塊,使用更方便簡單。
1、安裝
pip install loguru
2、導入及日志輸出控制台
from loguru import logger  #導入模塊
logger.debug('測試一下')    #直接調用方法即可
logger.error('錯誤測試')
 
        
運行,在控制台輸出效果圖,默認輸出格式如下:
包括時間、日志級別、模塊名、行號、日志內容

3、日志輸出到文件
from loguru import logger
logger.add('runtime_{time}.log', rotation='00:00')    #將結果輸出到文件里(當前目錄下),文件命名按照當前時間命名,並且設置roation——每天0點新增一個日志
logger.debug('測試一下')
 
        
效果圖如下:
![]()
自定義輸出到文件格式:
loguru官網的描述:https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.add

參數說明
- sink:支持多種數據結構,可以傳入一個字符串、一個文件對象、一個路徑對象代表路徑、一個方法、logging模塊的Handler
 - level:默認為debug類型
 - format:輸出格式設置
 
說明:一般可能修改的是sink,其他與logging模塊的一樣,可參考logging模塊中自定義配置
這里舉例sink為一個路徑對象,進行操作:
1)創建路徑對象(set_path.py)
import os
import datetime
class Projectpath:
  #創建日志路徑
  root_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))  #獲取項目的根目錄
  log_path=os.path.join(root_path,'Log')  #定義存放log的文件夾Log
  filename = os.path.join(log_path, '{}.log'.format(datetime.date.today()))  #設置日志文件名字,按照時間格式譬如2020-10-20.log命名
  if not os.path.exists(log_path):  #判斷文件夾Log是否存在,不存在進行創建
    os.mkdir(log_path)
     if not os.path.exists(filename):  #判斷日志文件是否存在,不存在進行創建
      with open(filename, mode='w', encoding='utf-8') as ff:
        print("日志文件創建成功!")
p_path=Projectpath()  #調用類
 
        
2)使用路徑對象結合loguru使用
import loguru
from set_path import p_path
if __name__=='__main__':
    logger.add(sink=p_path.filename, rotation='00:00', encoding='utf-8')
    logger.info('1020測試') 
        4、roation配置
4.1、配置根據文件大小輸出日志
logger.add('runtime_{time}.log', rotation="500 MB")  #配置文件大小為500MB,超過會自動生成一個新日志文件 
        4.2、配置根據時間輸出日志
logger.add('runtime_{time}.log', rotation='00:00')  #設置每天零點創建一個日志文件
logger.add('runtime_{time}.log', rotation='1 week')  #設置每隔一周創建一個日志文件 
        5、retention配置(配置日志最長保留時間)
logger.add('runtime.log', retention='7 days')  #配置日志文件最長保留時間為7天
 
        6、compression 配置(配置日志文件為壓縮格式)
logger.add('runtime.log', compression='zip')  #設置文件格式壓縮為zip,節省空間
 
        7、traceback(報錯回溯)
使用裝飾器,直接在函數或類前面加上@logger.catch
這里舉例:
@logger.catch
def div(x,y):
    return x/y
test=div(4,0)
 
        
若運行報錯,在日志中會出現tarceback信息,顯示效果圖如下:

