I.知人のロギングモジュール
#!/ usr / binに/のenvのPython #_ * _コーディング:UTF-8 _ * _ #@著者:yinzhengjie #blog:HTTP://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A図8C BF %%%のBB%E4%以下のB9%B4 8B E8 %%% AFのB7 / A8%E5 %%%% 96%90%E8 E7 #email:[email protected]が ロギングインポート logging.debug(「メッセージデバッグ「)#アラーム最低レベル、問題の診断には興味を持っているだけで、詳細な情報を表示します。 デバッグよりも高いlogging.info(「情報メッセージ」)#警報レベルは、期待通りに物事が進んでいることを確認します。 logging.warning(「警告メッセージ」)#アラームレベルが情報よりも高く、このモードでは、デフォルトの警告レベルです!これは、いくつかの予期せぬことが起こることを示している、または近い将来に(例えば、「ディスク領域不足」など)いくつかの問題。ソフトウェアがまだ正常に動作しています。 クリームよりlogging.error(「エラーメッセージ」)#警告アラームレベル、より深刻な問題として、ソフトウェアはまた、特定の機能を実行することはできません。 logging.critical(「重要なメッセージ」警告レベルよりもさらに高い)#エラー、重大なエラー、プログラム自体が実行され続けていない可能性があることを示します。 :#コードは次のように上記の結果は実行 WARNING:ルート:メッセージの警告を ERROR:ルート:エラーメッセージ CRITICAL:ルート:重要なメッセージ
II。出力ファイルケースをログ
#!/ usr / binに/のenvのPython #_ * _コーディング:UTF-8 _ * _ #@著者:yinzhengjie #blog:HTTP://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A図8CのA8%E5 %%%% 96%90%E8 E7 BF %%% BB%のE4%のB9%のB4 8B E8は、AFのB7 / %%% #email:[email protected]を ロギングインポート logging.basicConfigを(特にスルー#モジュールパラメータのデフォルトの動作を変更するにはログイン、 レベル= logging.errorを、#はERRORに警報レベルを設定し、 フォーマット=「%(関数は、asctime)S ---%(LINENO)---- Sの%(名)S:%(メッセージ)S「#カスタム印刷形式、 ファイル名=」yinzhengjie.txt「#ログファイル指定を出力する; たfileMode =」A」wは、マナー#書き込みログファイルに追加されます書き込み途中のヨーヨーをカバーします。 "" " formatパラメータ文字列形式を使用することができる: .. 1>%(名)S ロガー名 。2>%(levelno)の デジタル形式のログレベル 3>%(levelname)S。 テキストログレベル 4>。%(パス名)の モジュールログ出力機能の完全なパス名への呼び出しは、ないかもしれない 5>%(ファイル名)S モジュールログ出力機能名呼び出す 6>を%(モジュール)の コールログ出力モジュール名機能 7>%(FUNCNAME)の 関数名ログ出力機能の呼び出し 8>%(LINENO)のD 文のラインコールログ出力機能 9> F%(作成) UNIXと現在時刻、時刻を表す標準的な浮動小数点数 10> dは%(relativeCreated)は ミリ秒単位の数ので、出力ログ情報は、ロガーを作成するときに 11>%(いるasctime)の 現在の時刻の文字列をデフォルトのフォーマットは「2003-です07-08午前16時49分45秒、コンマの後896」ミリ秒 12>である。%(スレッド)D %(スレッド)DのスレッドID。ではないかもしれません 13>%(のthreadName)S スレッド名。ではないかもしれない 14>%(プロセス)Dの プロセスID。持っていないかもしれません > 15%(メッセージ)の メッセージがユーザに出力される 「」「 logging.debug(」デバッグメッセージ「)の診断の問題は関心の詳細な情報を持っている唯一の#アラーム最低レベル、。 Logging.info(」メッセージ情報「)デバッグよりも高い#警報レベルを、予想通り。物事を確認 logging.warning(」「メッセージを警告)#警報レベルは情報よりも高く、このモードは、デフォルトのアラームレベルです!、いくつかの予期せぬことが起こることを示していますまたは近い将来に(例えば、「ディスク領域不足」など)の問題の数は。ソフトウェアはまだ正常に動作している。 logging.error(「メッセージ・エラー」)クリームよりも#警告アラームレベルを、より深刻な問題として、ソフトウェアあなたは、特定の機能を実行することはできません。 警告レベルよりもさらに高いlogging.critical(「重要なメッセージ」)#エラー、重大なエラー、プログラム自体が実行され続けていない可能性があることを示すを。
III。ログファイル、および画面例に同時出力
#!/ usr / binに/のenvのPython #_ * _コーディング:UTF-8 _ * _ #@著者:yinzhengjie #blog:HTTP://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A図8C A8%E5 %%%% 96%90%E8 E7 BF %%%のBB%E4%以下のB9%B4 8B E8 %%% AFのB7 / #email:[email protected] インポートログ '' ' Pythonがロギングモジュールを使用ロギングは、公式文書が最も適切な要約用いて、4つの主要なクラスを含む: 1> .loggerインターフェイスアプリケーションが直接使用することができる提供する。 2> .handlerロギングが適切な宛先出力(作成ロガー)に送られます。 3>提供繊度.filterたデバイスのログ出力を決定し、 > 4のログ・レコードの最終的な出力フォーマットを決定.formatter。 ' '' :()get_logger をDEF 「<logging.RootLogger'; logger_obj logging.getLogger =()#は、インターフェースアプリケーションを直接使用することができるクラス> "のタイプを提供するLoggerオブジェクトを作成 FHロギングを=。 FileHandler( "yinzhengjie.txt" fh.setLevel(logging.ERROR)#定義ファイル出力ストリーム警告レベル; CH = logging.StreamHandler()#は、画面出力ストリームを作成し、 アラームレベルch.setLevel(logging.CRITICAL)#は、画面出力ストリームを定義する。 フォーマッタ= logging.Formatter( '%(いるasctime)S - %(名)S - %(levelname)S - %(メッセージ)S')#のログフォーマット定義から出力、このフォーマットは、画面出力とファイル出力ストリームのストリームを呼び出すことができます; 上記で定義されfh.setFormatter(フォーマッタ)#は、他の言葉で、形式を選択するには、このハンドラを、我々は形式を呼ぶ花の出力形式を追加します。 ch.setFormatter(フォーマッタ) logger_obj.addHandler(FH)オブジェクト#loggerを作成することができます複数のファイル出力ストリーム(FH)と画面出力ストリーム(CH)よ logger_obj.addHandler(CH) リターンlogger_objの#我々は良いロガーオブジェクトを作成します返さ logger_obj = get_logger() logger_obj.info( "情報") logger_obj.error( "エラー") logger_obj.warning( "警告") logger_obj.debug( "デバッグ") logger_obj.critical( "クリティカル") #屏幕输出格式如下: 2018-03- 08 00:40:20716 -ルート- CRITICAL -クリティカル
四の.logging共通の特長
#!/ usr / binに/のenvのPython #_ * _コーディング:UTF-8 _ * _ #@著者:yinzhengjie #blog:HTTP://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A図8C A8%E5 %%%% 96%90%E8 E7 BF %%%のBB%E4%以下のB9%B4 8B E8 %%% AFのB7 / #email:[email protected] '' ' Pythonがロギングモジュールログを使用公式文書は、最も適切な要約用いて、4つの主要なクラスが含まれます 。1> .loggerインターフェースアプリケーションを直接使用することができます提供し、 2> .handler(ロガーが作成する)適切な宛先出力に送信されるログ; 3> ;デバイスロギング出力決定.filter繊度提供する 。4>ログレコードの最終的な出力フォーマットを決定.formatterを。 「」「 #Logger 「」」 各プログラムのロガー出力前に取得する必要があります。ロガーは、一般的にプログラムモジュール名に対応する。 チャットGUIモジュールは、そのロガー:.することによって得ることができるような1>、 LOG = logging.getLogger(「chat.gui」) 2>コアモジュールはそうかもしれないが: LOGロギングを= .getLogger( "chat.kernel") 3>。LELは無視されますよりも低いレベル指定された最低レベルを記録します。組み込みのデバッグ最低レベルは、最高に重要です Logger.setLevel(LEL) 4>。指定されたフィルタを追加または削除 Logger.removeFilter(FILT)、Logger.addFilter(FILT)が > 5。指定されたハンドラを追加または削除 Logger.addHandler(hdlr)を、Logger.removeHandler(hdlr) 6>ロギング・レベルを設けてもよい logger.debug()、logger.info()、Logger.warning()、Logger.error()、Logger.critical() '' ' #handlerを ' '' ハンドラは、関連するターゲットを送信する責任があります指定された宛先への情報。Pythonのロギングシステムは、ハンドラの様々なを使用することができます。いくつかのハンドラは、コンソールに出力情報を、いくつかのロガーは、ファイルに出力することができますすることができ、そしていくつかのハンドラは、ネットワークに情報を送信することができます。それが十分でない場合は、独自のハンドラを書くことができます。AddHandlerは、マルチハンドラの複数の()メソッドによって追加されてもよい #1>クラスは無視されるLELレベル情報の下に、処理すべき情報を指定 Handler.setLevel(LEL) #2>フォーマットを選択するハンドラ Handler.setFormatterを() #3>フィルタオブジェクトを追加または削除 Handler.addFilter(FILT)、Handler.removeFilter(FILT) 各Loggerは、複数のハンドラをアタッチすることができます。次に、我々はいくつかの共通のハンドラを紹介: 1> .logging.StreamHandler ハンドラは、任意の出力ファイルオブジェクトにこの情報を使用することができるはsys.stdoutまたは(ファイル・オブジェクト)のsys.stderrを持ちと同様です。これは、コンストラクタである:StreamHandlerは([STRM])、パラメータはファイルオブジェクトSTRMです。デフォルトはsys.stderrを持ちある 2> .logging.FileHandler とStreamHandlerのように、ログファイルに情報を出力します。しかし、FileHandlerのは、あなたがファイルを開くのに役立ちます。そのコンストラクタは次のとおりです。FileHandlerの(ファイル名[、モード] )、ファイル名は、 ファイル名を指定する必要があり、ファイル名です。モードは、ファイルへの道を開くことです。Pythonの組み込み関数のopen()の使用を参照してください。デフォルトは「」、ファイルの末尾に追加されています。 3> .logging.handlers.RotatingFileHandler 上記のFileHandlerに似たハンドラが、それは、ファイルのサイズを管理することができます。ファイルが一定のサイズに達すると、それは自動的に現在のログファイルの名前を変更した後、出力され続け、同じ名前の新しいログファイルが作成されます。たとえば、ログファイルはchat.logです。chat.logが指定したサイズに達すると、RotatingFileHandlerファイルが自動的にchat.log.1の名前を変更しました。chat.log.1が既に存在する場合は、それが最初chat.log.2の名前を変更chat.log.1ます。。。最後に、chat.logを再作成し、それが出力ログ情報へ続きます。RotatingFileHandler(ファイル名[、モード[:それはコンストラクタで 、MAXBYTES [backupCount]]])、 ファイル名とモードパラメータ二FileHandlerの同じ。MAXBYTESファイルは、ログファイルの最大サイズを指定するために使用されます。MAXBYTESがゼロの場合、これは、ログファイルが無限大にすることができ、その後、上記の名前変更プロセスが発生しないことを意味します。保持するバックアップファイルの指定された数のためbackupCount。上記の名前の変更プロセスが発生したときに、2を指定した場合、元chat.log.2の名前は変更されませんが、削除されました。 4> .logging.handlers.TimedRotatingFileHandler ハンドラとRotatingFileHandler似ていますが、それは再作成するログファイルには、ファイルサイズを決定する際に判定する必要はありませんが、一定の時間間隔で自動的に新しいログファイルを作成します。プロセスの名前を変更し、RotatingFileHandler似ていますが、新しいファイルには、数値が、現在の時刻ではありません。これは、コンストラクタである:TimedRotatingFileHandler(ファイル名[、[ 、区間[、backupCount]]])、 ファイル名BACKUPCOUNTパラメータとパラメータは同じ意味を有し、RotatingFileHandler、間隔が時間間隔です。ときのパラメータは文字列です。時間間隔の単位で表さ、大文字と小文字を区別しません。それは次の値があります(S [S]、M [分]、H [H]、D [日]、W [週(間隔== 0代わっ月曜日)]、深夜[朝の日] '' "
V.自動的に例数を削減し、指定した時間に応じてファイルを保存します
#!/ usr / binに/のenvのPython #_ * _コーディング:UTF-8 _ * _ #@著者:yinzhengjie #blog:HTTP://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A図8C A8%E5 %%%% 96%90%E8 E7 BF %%% BB%のE4%のB9%のB4 8B E8は、AFのB7 / %%% #email:[email protected]を ロギングインポート ログインポートハンドラからの ロギングをロガー= .getLogger(__ name__) LOG_FILE = "timelog.log" #fh handlers.RotatingFileHandler =(ファイル名= LOG_FILE、MAXBYTES = 10、= BACKUPCOUNT。3) FH = handlers.TimedRotatingFileHandler(= LOG_FILEファイル名、場合= "S" ,. 5 =間隔ザ、指定されたファイルへbackupCount = 3)#filename定義された入力情報を、 指定された単位はS(秒)である場合には単位が指定された場合#は、周波数間隔は、時間間隔(あなたが)その周波数5Sよ理解されるであろう; backupCountは、バックアップされたファイルの数が、私はここに3つのファイルが割り当てられたことを示します。 フォーマッタ= logging.Formatter( '%(いるasctime )S%(モジュール)S:%(LINENO)D%(メッセージ)S' fh.setFormatter(フォーマッタ)#添加格式化输出 logger.addHandler(FH) logger.warning( "TEST1") logger.warning( "TEST2") logger.warning( "TEST3") logger.warning( "TEST4")