logger.enable: YES
logger.log_level: VERBOSE
logger.plugins: TestLogger.dll
logger.logstream.testlogger.enable: ON
logger.logstream.testlogger.header: example
logger.enable: YES
logger.log_level: VERBOSE
logger.plugins: TestLogger.py
logger.logstream.testlogger.enable: ON
logger.logstream.testlogger.header: example
OpenRTM-aistはFluent Bitプラグインのように、OpenRTM-aistデフォルトのロガー以外のロギング機能を拡張することができます。
このページでは独自ロガーの作成方法、使用手順を説明します。
今回作成したソースコードは以下から入手できます。
独自ロガーの作成方法
C++
独自ロガー作成
C++の場合はビルドのためのCMakeLists.txtを用意してください。今回はTestLoggerという名前で作成します。
ヘッダーファイル(TestLogger.h)、ソースファイル(TestLogger.cpp)を用意します。 coil::LogStreamBufferクラスを継承したTestLoggerStreamクラス、RTC::LogstreamBaseクラスを継承したTestLoggerクラスを実装します。 TestLoggerStreamはロギングの処理を実装するクラスで、TestLoggerはTestLoggerStreamを生成して外部から取得可能にするクラスです。
TestLoggerクラスのinit関数で初期化、getStreamBuffer関数でLogStreamBufferオブジェクトを取得することができます。 TestLoggerクラスは特に理由が無ければ変更の必要はないです。
TestLoggerStreamクラスのwrite関数でログの出力を行います。 この例では、プロパティのheaderオプションに設定した文字列をログメッセージの先頭に追加して標準出力しています。
TestLoggerInit関数は動的ライブラリをロードする時に呼び出す関数です。〇〇.dllであれば〇〇Initというように、初期化関数は動的ライブラリの名前+Initにしてください。 TestLoggerInit関数内でLogstreamFactoryのaddFactory関数を呼ぶことでロガーを追加できます。
動作確認
ビルドしてTestLogger.dll、TestLogger.soを生成後に動作確認を行います。
以下のrtc.confを作成してください。
まずlogger.pluginsオプションを設定してTestLoggerをロードするようにします。 ただロードするだけでは有効にはならないため、logger.logstream.testlogger.enableオプションを設定します。
※OpenRTM-aistの動作としてはlogger.logstream.${モジュール名}以下のオプションが設定されている場合にロガーが有効になるため、必ずしもenableオプションである必要はありません。
logger.logstream.testlogger.headerオプションでログメッセージの先頭に追加する文字列を指定しています。
このrtc.confを指定してRTCを起動するとログが標準出力されることが確認できます。
Python
Pythonファイル(TestLogger.py)を用意します。 OpenRTM_aist.LogstreamBaseを継承したTestLoggerクラスを実装します。
TestLoggerクラスのinit関数で初期化、log関数でログの出力、setLogLevel関数でログレベルの設定、shutdown関数で終了処理を行います。 この例では、プロパティのheaderオプションに設定した文字列をログメッセージの先頭に追加して標準出力しています。
TestLoggerInit関数はPythonモジュールをロードする時に呼び出す関数です。〇〇.pyであれば〇〇Initというように、初期化関数はPythonファイルの名前+Initにしてください。 TestLoggerInit関数内でLogstreamFactoryのaddFactory関数を呼ぶことでロガーを追加できます。
動作確認
以下のrtc.confを作成してください。
まずlogger.pluginsオプションを設定してTestLoggerをロードするようにします。 ただロードするだけでは有効にはならないため、logger.logstream.testlogger.enableオプションを設定します。
logger.logstream.testlogger.headerオプションでログメッセージの先頭に追加する文字列を指定しています。
このrtc.confを指定してRTCを起動するとログが標準出力されることが確認できます。