Python3ロギングログパッケージの例

完全なプログラムはログから切り離せません。開発フェーズ、テストフェーズ、またはプログラム操作フェーズのいずれであっても、ログを使用してプログラムの実行ステータスを表示したり、問題を特定したりできます。

以下は、python3のロギングライブラリのカプセル化です。これは、ほとんどの要件を満たすことができるはずです。 (満足できない場合は、以下にメッセージを残してください)

プログラムの構造:

|- - 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   #異なるパスのログ(実行ログ、監査ログ)を印刷する必要がある場合、シングルトンモードを使用することはできません(この行をコメントまたは削除してください)。また、パラメータ名を設定する必要があります。
classLogger:
 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:ログに出力される名前。デフォルトは実行中のプログラムの名前です。
 : param log_name:ログファイルの名前。デフォルトは現在の時刻(年)です。-月-日.log)
 : param log_path:ログフォルダのパス。デフォルトはロガーです。.同じレベルのディレクトリにあるpyログフォルダ
 : param use_console:コンソールで印刷するかどうか、デフォルトはTrueです
    """
 if not set_level:
  set_level = self._exec_type() #セットする_レベルがNoneの場合、現在の動作モードが自動的に取得されます
 self.__logger = logging.getLogger(name)
 self.setLevel(getattr(logging, set_level.upper())ifhasattr(logging, set_level.upper())else logging.INFO) #ログレベルを設定する
 if not os.path.exists(log_path): #ログディレクトリを作成します
  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):returngetattr(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

classSingleton:"""
 シングルトンデコレータ。
  """
 __ 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("これは重要なレベルの質問です!")
x.error("これはエラーレベルの問題です!")
x.warning("これは警告レベルの質問です!")
x.info("これは情報レベルの質問です!")
x.debug("これはデバッグレベルの問題です。")
x.log(50,"これは、クリティカルレベルの質問を書く別の方法です。")
x.log(40,"これは、エラーレベルの問題を記述する別の方法です。")
x.log(30,"これは、警告レベルの質問を書く別の方法です。")
x.log(20,"これは、情報レベルの質問を書く別の方法です。")
x.log(10,"これは、デバッグレベルの問題を記述する別の方法です。")
x.log(51,"これはレベル51の問題です。")
x.log(11,"これはレベル11の質問です!")
x.log(9,"ログレベルはデバッグよりも低く、印刷されません")
x.log(0,"このログも印刷されません")"""
動作結果:
2018- 10- 1200:18:06,562- demo - CRITICAL -これは重要なレベルの質問です!
2018- 10- 1200:18:06,562- demo - ERROR -これはエラーレベルの問題です!
2018- 10- 1200:18:06,562- demo - WARNING -これは警告レベルの質問です!
2018- 10- 1200:18:06,562- demo - INFO -これは情報レベルの質問です!
2018- 10- 1200:18:06,562- demo - DEBUG -これはデバッグレベルの問題です。
2018- 10- 1200:18:06,562- demo - CRITICAL -これは、クリティカルレベルの質問を書く別の方法です。
2018- 10- 1200:18:06,562- demo - ERROR -これは、エラーレベルの問題を記述する別の方法です。
2018- 10- 1200:18:06,562- demo - WARNING -これは、警告レベルの質問を書く別の方法です。
2018- 10- 1200:18:06,562- demo - INFO -これは、情報レベルの質問を書く別の方法です。
2018- 10- 1200:18:06,562- demo - DEBUG -これは、デバッグレベルの問題を記述する別の方法です。
2018- 10- 1200:18:06,562- demo - Level 51-これはレベル51の問題です。
2018- 10- 1200:18:06,562- demo - Level 11-これはレベル11の質問です!
"""
2018- 10- 12. log
2018- 10- 1200:18:06,562- demo - CRITICAL -これは重要なレベルの質問です!
2018- 10- 1200:18:06,562- demo - ERROR -これはエラーレベルの問題です!
2018- 10- 1200:18:06,562- demo - WARNING -これは警告レベルの質問です!
2018- 10- 1200:18:06,562- demo - INFO -これは情報レベルの質問です!
2018- 10- 1200:18:06,562- demo - DEBUG -これはデバッグレベルの問題です。
2018- 10- 1200:18:06,562- demo - CRITICAL -これは、クリティカルレベルの質問を書く別の方法です。
2018- 10- 1200:18:06,562- demo - ERROR -これは、エラーレベルの問題を記述する別の方法です。
2018- 10- 1200:18:06,562- demo - WARNING -これは、警告レベルの質問を書く別の方法です。
2018- 10- 1200:18:06,562- demo - INFO -これは、情報レベルの質問を書く別の方法です。
2018- 10- 1200:18:06,562- demo - DEBUG -これは、デバッグレベルの問題を記述する別の方法です。
2018- 10- 1200:18:06,562- demo - Level 51-これはレベル51の問題です。
2018- 10- 1200:18:06,562- demo - Level 11-これはレベル11の質問です!

上記のpython3ロギングログのカプセル化の例は、エディターによって共有されるすべてのコンテンツです。参照を提供したいと思います。

Recommended Posts

Python3ロギングログパッケージの例
Pythonオブジェクト指向の例
Python3.7デバッグサンプルメソッド
Python補間補間の例
Pythonの負の弾性率の操作例
Python正規式サンプルコード
Python出力数学記号の例
Python反復可能オブジェクトの重複排除の例
Python一次元二次元補間の例
Pythonインストールimpalaパッケージの手順
Pythonドローバーグラフ(バーグラフ)の例
pythonがパッケージパッケージを参照する方法を説明する
Pythonの右揃えの例の方法
Pythonの正規表現学習の小さな例
情報エントロピーの例のPython計算
Pythonウォーターフォールラインインジケーターの作成例
Pythonリスト理解操作例の概要
PythonATM関数の実装コード例
pythonでのosパッケージの使用
IV値を計算するPythonの例
Doubanソースを使用してpythonパッケージをインストールします
Pythonデコレータの簡単な使用例の概要
pythonアクセスAlipayの操作例
Pythontcp伝送コードの例の分析
Pythonリクエストモジュールセッションコード例
Python検証コード傍受識別コードの例