LoginSignup
0
0

More than 3 years have passed since last update.

ロギングプラグインの実装方法

Last updated at Posted at 2021-04-09

StreamRelay.NET.exe のロギング実行機能を呼び出しているプラグインの実装方法について説明する

StreamRelay.NET.exe/StreamRelay.NET.x86.exeには、いくつかの機能をプラグインとして実装できるようにインターフェイスを公開している。

今回は、ロギングを実行するためのインターフェイスを使って、プラグインを作成する方法を記述する。


既存のプラグイン

コンソールに出力するロギングや、WindowsFormを作成してそこに表示するタイプや、データ量(通信速度)だけ表示するロギングなどがある。

プラグイン的には、このあたり。

  • Plugins\Plugin.LoggingConsoleAndFile.dll
  • Plugins\Plugin.LoggingGUI.dll

実装したプラグインの呼び出され方

StreamRelay.NET.exeは、Streamクラスのread() でデータを読み取り、もう一つのStreamクラスのwrite()で書き出されるんですが、その時にロギング機能が呼び出される。

という感じ。

LoggingPlugin01.png


実装するインターフェイス

以下のインターフェイスを継承したクラスを実装すればよい

  • IPlugin.dll 中の jp.dip.rocketeer.Plugins.IPluginLogging インターフェイス

ロギングは指定方法によって、複数のオブジェクトを生成する必要はないので、このクラス一つだけ実装すればよい。


jp.dip.rocketeer.Plugins.IPluginLogging インターフェイス

StreamRelay.NET.exeが、引数/オプションの解析処理中に呼び出して、引数の指定内容によって有効化していれば、プロパティ「IsEnable=true」にして、ロギング機能を有効にする。

そうすると、StreamRelay.NET.exeのロギング時に void Logging(LoggingItem item) が呼び出される。

という感じ。

具体的には、起動直後の引数/オプションの解析処理中に、
int Args(String iStr1, String iStr2, String iStr3);
を呼び出すので、自分の引数であれば、プロパティ「IsEnable=true」にしてくれればよい。
自分の引数でなければ、0を返す。

より、具体的には、
例えば、
c:\>StreamRelay.NET.exe a b c d e f
というコマンドラインで起動したら、

  1. iStr1=a, iStr2=b, iStr3=c, で、Args() を呼び出し、
  2. iStr1=b, iStr2=c, iStr3=d, で、Args() を呼び出し、
  3. iStr1=c, iStr2=d, iStr3=e, で、Args() を呼び出し、
  4. iStr1=d, iStr2=e, iStr3=f, で、Args() を呼び出し、
  5. iStr1=e, iStr2=f, iStr3=NULL, で、Args() を呼び出し、

という感じ・・・

例えば、iStr1=b, iStr2=c, iStr3=d, の時、自分の引数ということで、iStr1=b, iStr2=c, を Args() で使用したら、2を返す。すると次は iStr1=d, iStr2=e, iStr3=f, で、Args() が呼び出される。

ということになっている。


jp.dip.rocketeer.Plugins.IPluginLogging インターフェイスで定義しているメソッド/プロパティ

実装する必要があるのは以下

jp.dip.rocketeer.Plugins.IPluginLoggingインターフェイスで定義されているのは、以下のとおり

String[] usage { get; }
ヘルプに引数を表示する際に呼び出される
int Args(String iStr1, String iStr2, String iStr3)
引数の解析中に呼び出される
void Enable(String iStr1)
有効化する。GUIなどから指定される事を想定している
Boolean IsEnable { get; }
有効かどうか返す(つまり引数で指定されたかされていないか)
void init(PluginManagePublicObj iObj)
他のプラグイン(乱数とか文字コードとか)も操作できるオブジェクトを渡す。PluginManagePublicObj型の変数を宣言して、それにセットすればよい
String InfomationConfigString{ get; }
現在の状態を表示する(設定を受け取っての状態(Verboseモード時や接続状態の表示時に呼び出される))
void Logging(LoggingItem item)
ロギング情報として呼び出される
void Close()
サービスとして動作しているような場合の終了処理を記述する(例: ローカルで、TCPサーバとして起動している場合のサーバの停止処理(接続中のストリームの停止処理は、別途しているので、待ち受けサーバの停止処理だけ記述すればよい))

jp.dip.rocketeer.Plugins.IPluginBaseインターフェイスで定義されている分については、インターフェイス IPluginBase についてを参照


jp.dip.rocketeer.Plugins.LoggingItem オブジェクト

Logging(LoggingItem item) の引数LoggingItemオブジェクトの、メソッド/プロパティは、以下のような感じ。

これらのメソッド/プロパティを操作してくれればよい。

public readonly String HeaderStr
ログのヘッダ(主に通信端末情報)
public readonly String message
ログメッセージ(文字列)または、エラーメッセージ
public readonly Byte[] hako
ログメッセージ(バイナリ)
public readonly Boolean IsRequest
リクエストかレスポンスか
public readonly Boolean IsVerbose
バーバスモードかどうか
public readonly Boolean IsDebugMode
デバグモードかどうか
public readonly Boolean IsError
エラーログかどうか
public readonly LoggingType type
ログのタイプ
public readonly DateTime LogTime
ログ時間
public String LogTimeStr()
ログの時間を文字列として返す

目次へ戻る

目次というか最初の一歩

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0