記事「ログレコードをマスターする(第9回):ビルダーパターンの実装とデフォルト設定の追加」についてのディスカッション

 

新しい記事「ログレコードをマスターする(第9回):ビルダーパターンの実装とデフォルト設定の追加」はパブリッシュされました:

本記事では、Logifyライブラリの利用をビルダーパターンと自動的なデフォルト設定によって大幅に簡単にする方法をご紹介します。ここでは、専用ビルダーの構造、スマートな補完機能を活用した利用方法、手動で設定をおこなわなくても動作するログ確保方法について解説します。さらに、MetaTrader 5ビルド5100向けの調整についても触れます。

私が個人および業務の様々なプロジェクトでLogifyを使い始めてすぐに気づいたのは、ライブラリそのものの堅牢性や機能性が課題なのではなく、その設定の複雑さこそが最大のハードルであるということでした。Logifyはエキスパートアドバイザー(EA)におけるログ管理のための強力なツールであり、複数のハンドラ、ログレベル、カスタムフォーマット、多言語対応など数多くの機能を提供しています。しかしその一方で、ユーザーは各ハンドラやフォーマッタ、各種パラメータを手作業で設定しなければならず、小規模なプロジェクトであれば問題ないものの、EAやプロジェクトの数が増えるにつれて、繰り返し、煩雑、エラーの温床となる作業に変わってしまいます。

たとえば、各EAごとに、タブコメント、コンソール、ファイル、データベースといった特定のハンドラを作成する、各ハンドラに対して最小ログレベルを設定する、エラーメッセージ、デバッグ、アラートごとにフォーマットを定義するといった複雑な設定を毎回繰り返すことを想像してください。これらはすべて必要な手順ではあるものの、結果としてコードは冗長で直感的でなくなり、開発の流れを妨げます。最初の複雑さがが障壁となり、Logifyが実行時に優れたログ管理を提供するにもかかわらず、その採用を躊躇させる要因になりかねません。

そこで、ユーザーの負担を減らし、柔軟性やカスタマイズ性を損なわずに、設定をもっと簡単にできないかと考えたのです。この時点で、Logify用のビルダーを作成するというアイデアが生まれました。これは、合理的なパターンを持つハンドラーを作成し、迅速かつローカライズされた調整を可能にする直感的なメソッドを使用して、構成全体を流動的かつ連鎖的に組み立てることができるクラスです。目指したのは、数十行に及ぶ複雑な設定コードを、ほんの数回のメソッド呼び出しに置き換えることです。つまり、何をしたいのかを明快に要約して書けるようにすることでした。

本記事では、この改善をどのように実装したかをご紹介します。まずビルダーの設計と使い方を解説し、続いて実際の例を用いてLogifyをどのように設定できるかをお見せします。


作者: joaopedrodev

 

ランタイム停止ロギングの追加を検討したことはありますか?もちろん、開発者がEAでこれを処理するのは普通のことです。

 
TerminalInfoString(TERMINAL_LANGUAGE);

ログのデフォルトのエラー出力言語は、以下のコードに従って、ユーザーの端末言語に戻すことができる。

 

デバッグメッセージとエラーメッセージだけを出力したいのですが。情報、アラートなどはすべてEAに組み込んでいます。enum ENUM_LOG_LEVEL'の各タイプにbool値を設定することで、必要なものを表示できるのでは?

本番 コードでは、ログのいくつかをオフにすると、最終的なex5ファイルにはコンパイルされないはずです。

 
Spoxus Spoxus 本番 コードでは、ログのいくつかをオフにすると、最終的なex5ファイルにはコンパイルされないはずです。

これを行うには、エキスパートに変数またはIPアドレスを使用して、希望のレベル値を格納し、それをハンドラに渡すだけです。以下はその例です。

//+------------------------------------------------------------------+
//| インポート|
//+------------------------------------------------------------------+
#include <Logify/Logify.mqh>
CLogify Logify;
//+------------------------------------------------------------------+
//| 入力|
//+------------------------------------------------------------------+
input ENUM_LOG_LEVEL InpLogLevel = LOG_LEVEL_INFO; // ログレベル
//+------------------------------------------------------------------+
//| エキスパート初期化関数|
//+------------------------------------------------------------------+
int OnInit()
  {
   Logify.EnsureDefaultHandler();
   Logify.GetHandler(0).SetLevel(InpLogLevel);
   
   Logify.Debug("RSI indicator value calculated: 72.56", "Indicators", "Period: 14");
   Logify.Info("Buy order sent successfully", "Order Management", "Symbol: EURUSD, Volume: 0.1");
   Logify.Error("Failed to send sell order", 10016,"Order Management");
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+

これにより、ハンドラで定義された重大度レベル以上のメッセージのみが表示されます。

 
hini #:

ログのデフォルトのエラー出力言語は、以下のコードに従って、ユーザーの端末言語に戻すことができる。

この記事のパート10は公開待ちです。この記事では、同一のログを抑制する方法と、端末のデフォルト言語を設定する方法について説明しています。ご提案ありがとうございました!