ログレベル
スクリプトの実行は、そのような情報、エラー異常なデバッグ情報として、状況がたくさんあります。これらのさまざまな状況に応じて、ログ分類の管理を継続するために、または比較的大きな干渉となりスクリーニングをトラブルシューティングします。。次のようにログレベルの一般的な位置付けは、次のとおりです。
レベル |
ときに使用します |
デバッグ |
デバッグ情報が、それが最も詳細なログ情報です。 |
INFO |
期待通りに物事が働くことを証明。 |
警告 |
(このような「フルディスク」など)いくつかの事故や問題が近い将来に起こるであろうがあったことを示しています。または適切にソフトウェアの仕事インチ |
エラー |
より深刻な問題のためには、ソフトウェアは、機能の一部を実行することはできません。 |
CRITICAL |
ソフトウェアを実行し続けることができないことを示す重大なエラー、。 |
まず、我々は違いを区別するために、ログ情報、デバッグ、エラーや他のレベルを実行する必要があります。もちろん、このレベルではセットを行くことができます。デバッグタイプをデバッグするときに通常の状況下で、我々我々が入力する情報との直接普通の出力は、予想されるエラーならば、我々は、最も適切なレベルにエラーログ、一般的な情報を、外出先のタイプを使用する必要があります。
ログフォーマット
次のようなログの可読性を向上させるためにログ形式、タイムライン+ + +モジュール特定情報ログ コンテンツフォーマット。混沌へと、すべての出力ログ情報なので、問題を見つけることが助長されていません。ログフォーマットは非常に簡単にビューを次のように読み取るために、出力に示されています。
2019年8月14日22:02:35633 backup.py [ライン:18] INFO ============試験バックアップ================
2019年8月14日22:02:39253 backup.py [ライン:20] INFOは、バックアップボタンをクリックしてください
2019年8月14日22:02:54025 backup.py [ライン:23] INFOは、次のボタンをクリックしてください
2019年8月14日22:03:09280 common_fun.py [ライン:83] INFOスタートセンドメール..
2019年8月14日22:03:11840 common_fun.py [ライン:91] INFOの電子メールの送信仕上がり!
2019年8月14日22:03:13305 common_fun.py [ライン:168] INFOは、バックアップのスクリーンショットを取得します
2019年8月14日23:36:00238 backup.py [ライン:17] INFO ============試験バックアップ================
2019年8月14日23:36:04530 backup.py [ライン:19] INFOは、バックアップボタンをクリックしてください
2019年8月14日23:37:20107 backup.py [ライン:17] INFO ============試験
ログの場所
ログ収集ポイントがセットにビジネスプロパティと組み合わせる必要がありながらプロジェクトは、ログの収集ポイントがたくさんあります。ロギングは、コードの実行が「ログインする準備ができている..」を挿入する前に、ログ情報、登録が完了した後、ログインプロンプトのログを設定した場合、例えば、誤解を招く与えるだろう、最終的に決定することができないことはので、ログインまたはログオンする前に問題が発生した後の問題ですログ収集ポイントの位置は非常に重要です。
ロギングモジュール
簡単な紹介
Pythonのロギングモジュールは、共通のシステム・ログを提供する、ログモジュールは、様々な方法で、さまざまなレベルを提供し、ログインすることができます
#インポートログモジュール
インポートのログ
ログ構成
ロギングモジュールは、前記フォーマッタロガー、ハンドラー、フィルター、 4つの部分。
- ロガーは、ログ取得を設定する手段を記録します。
- ハンドラプロセッサは、ログレコードは、適切なパスに送信されました。
- フィルタフィルタは、粒子サイズのよりよい制御を提供し、それは、ログ出力を決定してもよいです。
- フォーマッタフォーマッタ、最終出力におけるログのフォーマットを示します。
ロガーレコーダー
Loggerは、インターフェイスのデバッグを使用して、ツリー階層での情報、警告、エラー、重大Loggerインスタンスは、デフォルトルートロガーを作成するには、明示的に作成されていない場合、すなわち、レコードは、作成され、使用する前に作成する必要があり、アプリケーションのデフォルトのログレベル(WARN)、プロセッサハンドラ(StreamHandlerは、到来するログ情報を標準出力にプリントアウトされる)、及びフォーマッタフォーマッタ(デフォルトフォーマットは、単純なプログラムの出力を用いて第1のフォーマットです)。
方法:にbasicConfig(** kwargsから)は、実質的にロギングシステムを作るように構成されています。
一部のパラメータ
ファイル名の 指定されたログファイル名
ファイルモード のファイル名が指定されている場合は、指定されたファイルのオープンモードは、(ファイルモードが指定されていない場合、デフォルトは)
ヒント:ファイル読み書きモード
- 書き込みのために開かれたwが、
- Wファイルが存在する場合、我々は最初の(再)作成、その後、空にしなければなりません
- (必要に応じて新しいファイルを作成し、最初からEOF)追加モードを開きます。
- R +書き込みモード用開口
- 書き込みモードでW +オープン(W参照)、
- 読み書きモードでオープン+(参照)
フォーマット フォーマット文字列を使用して、ハンドラを指定しています。
datefmtは 、日付/時刻形式を指定しました。スタイルのフォーマット文字列が指定されている場合、それはフォーマット文字列を指定するために使用されるタイプです。
レベル 指定されたレベルにルートロガーレベル。
logging_test.py
#インポートモジュール
インポートのログ
#logging.basicConfig(レベル= logging.DEBUG)
ログイン.basicConfig(レベル= logging.INFO)
logging.debug( 'デバッグ情報')
logging.info( 'ハロー嘿嘿)
logging.warning('警告情報')
logging.error('エラー情報')
logging.critical('重要な情報')
ハンドラプロセッサ
ハンドラプロセッサ、適切なパスに送信されたログレコード、ハンドラプロセッサには多くの種類がありますが、一般的に使用される3つがあります。
1.StreamHandler
ログ出力は、sys.stdoutの、sys.stderrを持ち、または任意の同様の文書ストリームとして、オブジェクトに送信されます。上記の例では、コンソールに出力されます。
2.FileHandler
ログ出力をディスクファイルに送信されます。それはStreamHandlerの出力を継承します。
logging.basicConfig(ファイル名= 'runlog.log'、レベル= logging.DEBUG)
3.NullHandler
任意のフォーマットや出力なし。それは本質的に「ノーアクション」手順個人用の開発です。
フィルターフィルター
ハンドラとロガーフィルタは、濾過のレベルよりも複雑行うために使用することができます。
フォーマッタ
%のM:%S.最終規則のセットを使用して、フォーマッタは、ログ情報、構造及びコンテンツ、デフォルトの時間フォーマット%Y-%M-%D%Hオブジェクト
フォーマット |
説明 |
%(levelno)■ |
ログレベル値を印刷 |
%(levelname)■ |
ログレベルの名前を印刷 |
%(パス名)の |
現在実行中のプログラムの印刷パス |
%(ファイル名)の |
現在実行中のプログラムの名前を印刷 |
%(FUNCNAME)■ |
現在の印刷ログ機能 |
%(LINENO)D |
ログの現在の行番号を印刷 |
%(いるasctime)■ |
印刷ログ時刻 |
%(スレッド)からd |
印刷スレッドID |
%(のthreadName)■ |
印刷スレッド名 |
%(プロセス)D |
印刷プロセスID |
%(メッセージ)の |
印刷ログ情報 |
どのように使用するには:
logging.basicConfig(ファイル名= 'runlog.log'、レベル= logging.DEBUG、フォーマット= '%(いるasctime)S%(ファイル名)S [行:%(LINENO)D]%(levelname)S%(メッセージ)の「)
出力
2019年8月14日14:35:19430 logging_test.py [ライン:6] DEBUGdebug情報 2019年8月14日14:35:19430 logging_test.py [ライン:7] INFOhelloのhongge 2019年8月14日14:35:19430 logging_test.py [ライン:8] WARNINGwarning情報 2019年8月14日14:35:19430 logging_test.py [ライン:9] ERRORerror情報 2019年8月14日14:35:19430 logging_test.py [ライン:10] CRITICALcriticalインフォメーション
戦闘活動のロギング
テストシナリオ
PubMedのは、出力形式は、ログを指定し、指定したファイルへのログ保存設定、ヘルプ増加ログ収集機能に以前のスクリプトのApp学校を開始します。
コードの実装
kyb_logger.py
#。导入模块 webdriverをappiumインポートから インポートのYAML インポートロギング selenium.common.exceptionsからはNoSuchElementExceptionインポート ファイルをオープン=( './ desired_caps.yaml'、 'R') データ= yaml.load(ファイル) logging.basicConfig(レベル= logging.INFO、ファイル名= 'runlog.log'、 フォーマット= '%(いるasctime)S%(ファイル名)S [行:%(LINENO)D]%(levelname)S%(メッセージ)S') desired_caps = {} desired_caps [ 'platformName'] =データ[ 'platformName'] desired_caps [ 'platformVersion'] =データ[ 'platformVersion'] desired_caps [ 'DEVICENAME'] =データ[ 'DEVICENAME'] desired_caps [ 'アプリ'] =データ[ 'アプリ'] desired_caps [' appPackage '] =データ['appPackage '] desired_caps [' appActivity '] =データ[' appActivity '] desired_caps [ 'NORESET'] =データ[ 'NORESET'] logging.info( 'アプリを起動...') ドライバ= webdriver.Remote( 'のhttp://' + STR(データ[ 'IP'])+ ': 「、desired_caps) '+ STR(データ['ポート'])+' / WD /ハブ check_cancelBtn DEF(): logging.info( 'cancelBtnをチェック') 試し: cancelBtn = driver.find_element_by_id( 'アンドロイド:ID /ボタン2' ) はNoSuchElementExceptionを除い: logging.info( 'なしcancelBtn') 他: cancelBtn.click() DEF check_skipBtn(): logging.info( 'チェックskipBtn') 試してみてください。 skipBtn = driver.find_element_by_id( 'com.tal.kaoyan:ID / tv_skip」) :NoSuchElementExceptionを除く logging.info( 'いいえskipBtn') 他: skipBtn.click() check_cancelBtn() check_skipBtn()
runlog.log
2019年8月14日15:27:38964 kyb_logger.py [ライン:32]インフォスタートアプリ... 2019年8月14日15:27:47641 poolmanager.py [ライン358] INFORedirecting http://127.0.0.1: 4723 / WD /ハブ/セッション- > http://127.0.0.1:4723/wd/hub/session/dfc8e7e7-71cc-4f0b-9aa6-5db0fdc98a84 2019年8月14日15:27:47644 kyb_logger.py [ライン: 36]チェックcancelBtnについて 2019年8月14日15:27:チェックskipBtnについて46]:49.442 kyb_logger.py [ライン