SAPのもう1つのロガー

彼の人生のすべてのプログラマーは、少なくとも一度は自分のロガーを書くべきです。

人気のことわざ
今日は、開発中にアプリケーションログを使用する方法を説明し、コミュニティに、もう少し快適に過ごせるように設計された別の自転車を提供したいと思います。



そのため、 SLG0



およびSLG1



としても知られるアプリケーションログ...



SAP標準



アプリケーションログは、新しい開発、特にWebDynproテクノロジーを使用したバックグラウンドタスク、Webサービス、およびインターフェースのデバッグとサポートに非常に役立ちます。つまり、デバッガーを使用することが常に不可能または単に不便な場合です。 マガジンはSAPの標準機能であるため、いつでも利用できます。



トランザクションSLG1



ログを表示できます。







上部には指定期間のログが表示され、下部には選択したジャーナルに記録されたメッセージが表示されます。



ロギング


各ログには、オブジェクトサブオブジェクト という 2つの主な属性があります 。 これにより、システムで作成されたマガジン全体を開発エリアおよび特定のアプリケーション(たとえば、為替レートを受け取るサービスのZ_WEB_SERVICES



オブジェクトとEXCHANGE_RATE



サブオブジェクト) Z_WEB_SERVICES



に分離できます。



オブジェクトとサブオブジェクトを維持するには、トランザクションSLG0が使用されます。
手順1.レコードは2つの手順で追加されます。最初の画面で、オブジェクトの名前が決定されます。







ステップ2.次に、新しいオブジェクトに対して、左側のツリーで「サブオブジェクト」が選択され、サブオブジェクトが作成されます。







使い方


アプリケーションにログサポートを追加するには、次の機能モジュールを使用するだけで十分です。





ところで、 BAL_DB_SAVE



は入力として識別子のリストを受け入れ、一度に複数のログを保存できます。



SLG1のサンプルコードと結果(ログの表示)
GitHub Gistのソースコード: z_log_test.abap







メッセージの詳細



前の例では、ログは単純なテキストファイルと大差ありません。 ただし、SAPログでは、メッセージには日付とテキストよりも大きなプロパティセットがあり、それぞれを使用して、ジャーナルを表示するときにレコードをフィルタリングおよびグループ化できます。その一部を図に示します。







  1. メッセージの種類 -ログを表示するときのアイコンの色は、このパラメーターに依存します
  2. 重大度レベル -エントリはこの属性によって自動的に分類されます
  3. ソート基準-3文字の単語、メッセージをグループ化およびソートするための記号
  4. 詳細レベル -1から9までの数値(フィルターに参加可能)
  5. 追加情報 -任意のパラメーターセットと、機能モジュールまたはそれを表示するための手順へのリンク。 たとえば、サーバーのHTTP応答ヘッダーをデータ転送エラーメッセージに添付したり、パラメーターを使用してトランザクションを呼び出したりするために使用できます。


表示すると、次のようになります




別のロガー



使用されるメッセージプロパティが多いほど、ロギングコードが大きくなります。これは本質的に二次的なものです。 この問題を解決するために、また便宜上、開発者は多くの場合、別々のインクルードで補助ルーチンを作成するか、機能モジュールとクラスを作成します。



自転車を設計するとき、機能と利便性の最適な組み合わせを見つけようとしました。 実装することが判明しました:





使用する


最初に、静的なINSTANTIATE



メソッドを使用してオブジェクトのインスタンスを取得する必要があります

引数-オブジェクト、サブオブジェクト、外部識別子:



 CALL METHOD zbc_cl_log=>instantiate EXPORTING iv_object = gc_object iv_subobject = gc_subobject iv_external_id = gc_external_id RECEIVING ro_log = go_log.
      
      





外部識別子パラメーター 、雑誌のリストの別の列にテキストとして表示され、目で正しいものを見つけるのに役立ちます。



ロギングは、 WRITE



メソッドを使用して行われます。



 CALL METHOD go_log->write EXPORTING iv_type = zbc_cl_log=>info iv_text = 'Document Source (XML)' iv_class = zbc_cl_log=>class_additional_information iv_level = zbc_cl_log=>level_info iv_sort = 'XML' iv_details = gv_xml_b iv_viewer = 'ZBC_LOG_VIEWER_XML_XSTRING'.
      
      





ログに書き込む前メッセージフィルターのレベルは、 THRESHOLD



メソッドを使用して決定されます。このメソッドのパラメーターは、定義済みのLEVEL_*



またはLEVEL_NO_THRESHOLD



から任意の値を取ることができます。この場合、すべてのメッセージが記録されます。 私の観察によれば、作成されている雑誌は常に多くあり、遅かれ早かれ、それらの質量がシステム全体のパフォーマンスに影響を与える瞬間があります。 レベルフィルタを使用すると、現時点で「余分な」パーツの記録を無効にできます。



IV_DETAILS



メッセージの IV_DETAILS



を送信するために使用され、オンデマンドでこのデータを表示する責任がある汎用モジュールの名前はIV_VIEWER



です。 WRITE



メソッド内で、 IV_DETAILS TYPE ANY



転送されたデータはID



変換を使用してXMLにシリアル化され、表示中にアクセスすると、データが解凍され、指定された汎用モジュールに転送されます。



このアプローチは、いくつかの機能をもたらします。





GV_XML_B



のタイプがXStringの場合、汎用モジュールのインターフェースは次のようになります。



 FUNCTION zbc_log_viewer_xml_xstring . *"---------------------------------------------------------------------- *"*"Local Interface: *" IMPORTING *" REFERENCE(I_DATA) TYPE XSTRING *"---------------------------------------------------------------------- CALL FUNCTION 'DISPLAY_XML_STRING' EXPORTING xml_string = i_data EXCEPTIONS OTHERS = 0. ENDFUNCTION.
      
      







結論の代わりに


これまでのところ、私は自分のプロジェクトでこのソリューションを試す必要はありませんでしたが、ほぼ間違いなく、まだ気づいていないバグ、欠点、エラーさえあります。開発コードと設計に関するコメントに感謝します。 ソースは、NuggetおよびSlinkeeファイルの形式でGitHubで入手できます。ABAPコード交換ツールであるSAPlinkを使用して、自分でインストールできます。



GitHubリポジトリ: https : //github.com/yaruson/ZBC_LOG_UTILS

SAPlinkホームページ: https ://www.assembla.com/spaces/saplink/wiki



All Articles