欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python3 logging日志封裝實例

 更新時間:2020年04月08日 09:09:02   作者:偽善者  
這篇文章主要介紹了python3 logging日志封裝實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

一個完整的程序離不開日志,無論是開發(fā)階段,還是測試階段,亦或程序運行階段,都可以通過日志查看程序的運行情況,或是定位問題。

下面是對 python3 的日志庫 logging 進行了封裝,對于大部分的需求應該是能滿足的。(如果有不滿足的地方,歡迎在下方留言)

程序結(jié)構(gòu):

|--logger.py
|
|--singleton.py
|
|--demo.py
|
|--log
|  |
|  2018-10-12.log

logger.py

import os
import sys
import time
import logging
from singleton import Singleton
 
 
@Singleton   # 如需打印不同路徑的日志(運行日志、審計日志),則不能使用單例模式(注釋或刪除此行)。此外,還需設定參數(shù)name。
class Logger:
  def __init__(self, set_level="INFO",
         name=os.path.split(os.path.splitext(sys.argv[0])[0])[-1],
         log_name=time.strftime("%Y-%m-%d.log", time.localtime()),
         log_path=os.path.join(os.path.dirname(os.path.abspath(__file__)), "log"),
         use_console=True):
    """
    :param set_level: 日志級別["NOTSET"|"DEBUG"|"INFO"|"WARNING"|"ERROR"|"CRITICAL"],默認為INFO
    :param name: 日志中打印的name,默認為運行程序的name
    :param log_name: 日志文件的名字,默認為當前時間(年-月-日.log)
    :param log_path: 日志文件夾的路徑,默認為logger.py同級目錄中的log文件夾
    :param use_console: 是否在控制臺打印,默認為True
    """
    if not set_level:
      set_level = self._exec_type() # 設置set_level為None,自動獲取當前運行模式
    self.__logger = logging.getLogger(name)
    self.setLevel(getattr(logging, set_level.upper()) if hasattr(logging, set_level.upper()) else logging.INFO) # 設置日志級別
    if not os.path.exists(log_path): # 創(chuàng)建日志目錄
      os.makedirs(log_path)
    formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
    handler_list = list()
    handler_list.append(logging.FileHandler(os.path.join(log_path, log_name), encoding="utf-8"))
    if use_console:
      handler_list.append(logging.StreamHandler())
    for handler in handler_list:
      handler.setFormatter(formatter)
      self.addHandler(handler)
 
  def __getattr__(self, item):
    return getattr(self.logger, item)
 
  @property
  def logger(self):
    return self.__logger
 
  @logger.setter
  def logger(self, func):
    self.__logger = func
 
  def _exec_type(self):
    return "DEBUG" if os.environ.get("IPYTHONENABLE") else "INFO"

singleton.py

class Singleton:
  """
  單例裝飾器。
  """
  __cls = dict()
 
  def __init__(self, cls):
    self.__key = cls
 
  def __call__(self, *args, **kwargs):
    if self.__key not in self.cls:
      self[self.__key] = self.__key(*args, **kwargs)
    return self[self.__key]
 
  def __setitem__(self, key, value):
    self.cls[key] = value
 
  def __getitem__(self, item):
    return self.cls[item]
 
  @property
  def cls(self):
    return self.__cls
 
  @cls.setter
  def cls(self, cls):
    self.__cls = cls

demo.py

import logger
 
x = logger.Logger("debug")
 
x.critical("這是一個 critical 級別的問題!")
x.error("這是一個 error 級別的問題!")
x.warning("這是一個 warning 級別的問題!")
x.info("這是一個 info 級別的問題!")
x.debug("這是一個 debug 級別的問題!")
 
x.log(50, "這是一個 critical 級別的問題的另一種寫法!")
x.log(40, "這是一個 error 級別的問題的另一種寫法!")
x.log(30, "這是一個 warning 級別的問題的另一種寫法!")
x.log(20, "這是一個 info 級別的問題的另一種寫法!")
x.log(10, "這是一個 debug 級別的問題的另一種寫法!")
 
x.log(51, "這是一個 Level 51 級別的問題!")
x.log(11, "這是一個 Level 11 級別的問題!")
x.log(9, "這條日志等級低于 debug,不會被打印")
x.log(0, "這條日志同樣不會被打印")
 
 
"""
運行結(jié)果:
2018-10-12 00:18:06,562 - demo - CRITICAL - 這是一個 critical 級別的問題!
2018-10-12 00:18:06,562 - demo - ERROR - 這是一個 error 級別的問題!
2018-10-12 00:18:06,562 - demo - WARNING - 這是一個 warning 級別的問題!
2018-10-12 00:18:06,562 - demo - INFO - 這是一個 info 級別的問題!
2018-10-12 00:18:06,562 - demo - DEBUG - 這是一個 debug 級別的問題!
2018-10-12 00:18:06,562 - demo - CRITICAL - 這是一個 critical 級別的問題的另一種寫法!
2018-10-12 00:18:06,562 - demo - ERROR - 這是一個 error 級別的問題的另一種寫法!
2018-10-12 00:18:06,562 - demo - WARNING - 這是一個 warning 級別的問題的另一種寫法!
2018-10-12 00:18:06,562 - demo - INFO - 這是一個 info 級別的問題的另一種寫法!
2018-10-12 00:18:06,562 - demo - DEBUG - 這是一個 debug 級別的問題的另一種寫法!
2018-10-12 00:18:06,562 - demo - Level 51 - 這是一個 Level 51 級別的問題!
2018-10-12 00:18:06,562 - demo - Level 11 - 這是一個 Level 11 級別的問題!
"""
2018-10-12.log

2018-10-12 00:18:06,562 - demo - CRITICAL - 這是一個 critical 級別的問題!
2018-10-12 00:18:06,562 - demo - ERROR - 這是一個 error 級別的問題!
2018-10-12 00:18:06,562 - demo - WARNING - 這是一個 warning 級別的問題!
2018-10-12 00:18:06,562 - demo - INFO - 這是一個 info 級別的問題!
2018-10-12 00:18:06,562 - demo - DEBUG - 這是一個 debug 級別的問題!
2018-10-12 00:18:06,562 - demo - CRITICAL - 這是一個 critical 級別的問題的另一種寫法!
2018-10-12 00:18:06,562 - demo - ERROR - 這是一個 error 級別的問題的另一種寫法!
2018-10-12 00:18:06,562 - demo - WARNING - 這是一個 warning 級別的問題的另一種寫法!
2018-10-12 00:18:06,562 - demo - INFO - 這是一個 info 級別的問題的另一種寫法!
2018-10-12 00:18:06,562 - demo - DEBUG - 這是一個 debug 級別的問題的另一種寫法!
2018-10-12 00:18:06,562 - demo - Level 51 - 這是一個 Level 51 級別的問題!
2018-10-12 00:18:06,562 - demo - Level 11 - 這是一個 Level 11 級別的問題!

以上這篇python3 logging日志封裝實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

最新評論