ログメッセージシステム#
ログメッセージシステムの中核には、log4cppaおよび siso_log ライブラリにメッセージを転送するディスパッチャーがあります。ロギングライブラリの log4cpp は、GenICamおよび pylon SDKによって使用され、コンソール、ログファイル、syslog、pylon の Event Logger Application、その他の宛先へのロギング機能を提供します。ユーザーアプリケーションは、siso_log ライブラリを使用してコールバックハンドラーを登録し、警告やエラーメッセージを受信することができます。
-
log4cpp は Log4j の C++ 移植版であり、SourceForge で提供されています。log4cpp は、Framegrabber SDK バージョン 5.11.3 で初めて採用されました。Framegrabber SDK の旧バージョンでは、log4cpp の代替である log4cxx が使用されていました。 ↩
ログ出力のための Log4cpp の設定#
イメージ log4cpp ライブラリは、設定ファイルを使用して設定できます。Framegrabber SDK のデフォルト設定は、インストールディレクトリ内の次のファイルにあります。 bin/BaslerFgSdkLogging.properties。.設定を変更するには、このファイルを編集するか、独自の設定ファイルを用意して環境変数を設定します。 BASLER_FGSDK_LOGGING_CONFIG をファイルの場所に設定します。
の設定ファイル log4cpp はテキストファイルです。ファイルの各行には1つの設定オプションを含めることができ、その形式は次のとおりです。 <key>=<value>の形式で指定され、 # 文字で始まるオプションのコメントを続けることができます。空行や、コメントのみを含む行も許可されます。
<key> は階層要素であり、階層のレベルは . 文字で区切られます。階層の最上位は常に log4cppであり、 log4jを使用することもできます。階層の 2 番目のレベルは、いずれかです category (含みます rootCategory)、または appender.
カテゴリはログメッセージの送信元を指定し、アペンダーはログメッセージの送信先を指定します。
Log4cpp カテゴリの設定#
カテゴリのオプションは <min-severity>[, <appender>[...]]です。次の値: <min-severity> には次を指定できます:
FATAL,ALERT,CRIT,ERROR,WARN,NOTICE,INFO、またはDEBUG
<min-severity> は、そのカテゴリおよびすべてのサブカテゴリについて報告されるログメッセージの重要度閾値を指定します。オプションのリストである <appender> は、そのカテゴリおよびすべてのサブカテゴリのログメッセージをどの阿ペンダーに転送すべきかを指定します。
カテゴリのオプションはすべてのサブカテゴリに継承されますが、サブカテゴリに対して別のオプションを指定することで上書きできます。同様に、すべてのサブサブカテゴリはサブカテゴリの設定を継承します。
ほとんどの設定ファイルでは、特別な指定を使用して、すべてのカテゴリに対する合理的なデフォルトの設定から始まります rootCategory例えば:
log4j.rootCategory=NOTICE, stdout
この設定オプションは、重要度が FATAL, ALERT, CRIT, ERROR, WARNおよび NOTICE のすべてのメッセージをアペンダーに送信します stdout。で説明されているように、設定ファイルでアペンダーを定義する必要があります。 Log4cpp アペンダーの設定.
ログレベルの割り当て#
Framegrabber SDK は内部で、ログメッセージの重要度に対して異なる名前のセットを使用しています。これらは、Framegrabber SDK の旧バージョンで使用されていたライブラリ log4cxx の命名規則に従っています。これらの内部ログレベルは、たとえば siso_log ライブラリや microDisplay X の Debug ダイアログを使用する際などに確認できます。
| 重要度 | siso_log | log4cpp |
|---|---|---|
| より低い | TRACE | DEBUG |
| DEBUG | INFO | |
| INFO | 注記 | |
| WARN | WARN | |
| ERROR | ERROR | |
| より高い | FATAL | CRIT、FATAL、ALERT |
Log4cpp アペンダーの設定#
ログメッセージを特定の出力先に送るには、設定ファイルでアペンダを定義し設定する必要があります。アペンダは、設定ファイル内のカテゴリ設定に含まれている必要があります。
Framegrabber SDKと共にインストールされる log4cpp ライブラリには、さまざまな種類のアペンダが用意されています。各種類のアペンダには、ログファイルの命名規則、保存場所、サイズ制限の有無などを定義するための設定可能なパラメータのセットがあります。
アペンダーを定義するには、名前をキーとして log4cpp.appender 階層で指定し、タイプを値として指定します。たとえば、次の行は stdout という名前のアペンダーを定義し、ログメッセージをコンソールに書き込みます:
log4cpp.appender.stdout=ConsoleAppender
名前付きアペンダーの下位階層でオプションを設定することにより、アペンダーを追加で設定できます。たとえば、次の行はログメッセージのフォーマットを変更します:
log4cpp.appender.stdout.layout=PatternLayout
log4cpp.appender.stdout.layout.ConversionPattern=[%d:%t:%c] %p: %m%n
ログメッセージのフォーマット#
すべてのアペンダーは、以下を設定および構成することで、ログメッセージをフォーマットするためのいくつかの共通オプションを共有しています layout。これ以上設定できない、シンプルで固定されたレイアウトが2つあります: SimpleLayout および BasicLayout. PatternLayout を設定することで設定できます ConversionPattern.
オプション ConversionPattern はフォーマット文字列であり、以下のフォーマット指定子と、すべてのログメッセージに表示されるテキストを含めることができます:
| 指定子 | 意味 |
|---|---|
| %% | 文字 % |
| %c | カテゴリ |
| %d | 日付(下記参照) |
| %m | ログメッセージ |
| %n | 改行文字 |
| %p | 優先度(重要度) |
| %r | レイアウト作成からの経過ミリ秒数 |
| %R | 1970年1月1日からの経過秒数 |
| %t | Thread ID |
| %u | プロセスの開始からのクロックティック数 |
日付フォーマット指定子は、システムで指定された短い日付フォーマットに従って日付と時刻を追加します。日付フォーマットをカスタマイズするには、日付フォーマット指定子の後に、中括弧で囲まれたstrftimeフォーマット指定子を続けることができます (%d{...})。詳細は、 strftimeのドキュメント を参照してください。strftimeのフォーマット指定子に対する唯一の変更点は、指定子である %l は、ミリ秒をゼロ埋めして3桁で出力します。たとえば、ミリ秒を含む拡張ISO 8601形式で日付と時刻を出力するには、次のいずれかを使用します。 %d{%FT%T.%l%z}、または %d{%Y-%m-%dT%H:%M:%S.%l%z}.
ファイルへのログ出力#
ログメッセージをファイルに保存するアペンダーには、次の2つがあります。 FileAppender および RollingFileAppender.
イメージ FileAppender には必須のオプションが1つあります。 fileName、ファイル名を設定します。たとえば、次という名前のファイルにログを記録するには fglib.log コンソールに加えて、設定ファイルは次のようになります。
log4cpp.rootCategory=NOTICE, stdout, logfile
log4cpp.appender.stdout=ConsoleAppender
log4cpp.appender.stdout.layout=SimpleLayout
log4cpp.appender.logfile=FileAppender
log4cpp.appender.logfile.fileName=fglib.log
log4cpp.appender.logfile.layout=BasicLayout
イメージ RollingFileAppender は指定されたファイルサイズまでのみログファイルに書き込み、その後ファイルのバックアップを作成してファイルをクリアし、新しく書き込みを開始します。と同様に FileAppender, fileName はログファイルの名前を指定するために使用されます。さらに、 maxFileSize を設定して、ローリング前の最大ファイルサイズを変更できます。のデフォルトは maxFileSize は10 MBです。許可されるバックアップファイルの数を設定するには、 maxBackupIndexを設定できます。のデフォルトは maxBackupIndex は1です。
Pylon Event Loggerの使用#
log4cppライブラリの代わりに、pylon Event Logger Applicationを使用してログメッセージの表示、フィルタリング、ハイライトを行うこともできます。
pylon Event Loggerアプリケーションからユーザーアプリケーションを起動すると、設定ファイルが自動的に生成されて使用されるため、pylon Event Loggerアプリケーションがユーザーアプリケーションから確実にログメッセージを受信できるようになります。
ユーザーアプリケーションを別の方法で起動する場合、 log4cpp 設定に次の項目を含める必要があります: EltAppenderが無効になります。 EltAppender はネットワークインターフェイス経由でログメッセージを送信することで機能するため、使用するポートを portNumberで指定する必要があります。ポートはpylon Event Loggerアプリケーションの設定と一致している必要があります。このシナリオのデフォルト設定は次のようになります。
log4j.rootCategory=NOTICE, pylonEventLogger, stdout
log4j.appender.stdout=ConsoleAppender
log4j.appender.stdout.layout=PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%d:%t:%c] %p: %m%n
log4j.appender.pylonEventLogger=org.apache.log4j.EltAppender
log4j.appender.pylonEventLogger.layout=org.apache.log4j.PatternLayout
log4j.appender.pylonEventLogger.layout.ConversionPattern=[%d:%t:%c] %p: %m%n
log4j.appender.pylonEventLogger.portNumber=12320
siso_log ライブラリを使用したアプリケーションでのログメッセージの受信#
int SisoLog_InitLibrary();
typedef void FuncType_LogMsgCallback(
tProcessId pid,
tThreadId tid,
const char * const logger,
unsigned int level,
const char * const msg,
unsigned int tagcount,
const tSisoLogTag * const tags,
void * userdata
);
int SisoLog_RegisterLogMsgCallback(
FuncType_LogMsgCallback * callback,
void * userdata);
int SisoLog_SetMode(
unsigned int mode);
int SisoLog_GetMode(
unsigned int * mode);
Framegrabber SDKのログメッセージシステムからログメッセージを受信するには、アプリケーションプロジェクトにライブラリ siso_log を追加し、ソースコードに siso_log.h を含めます。詳細は、Framegrabber API Manualの章 前提条件 を参照してください。
ライブラリの使用を開始するには、 siso_log まず次を呼び出します: SisoLog_InitLibrary() を呼び出して初期化を実行します。
Using SisoLog_RegisterLogMsgCallback() 型の関数を登録できます FuncType_LogMsgCallbackこれは、次の重要度のログメッセージが発生するたびに呼び出されます。 WARN, ERROR、または FATAL は、ログメッセージシステムから報告されます。1つのプロセスにつき1つの関数のみを登録できます。
のパラメータ SisoLog_RegisterLogMsgCallback() コールバック関数:
- コールバック関数の最初の2つのパラメータは、プロセスIDとスレッドIDです。
- 3番目のパラメータは、ロガーの名前(カテゴリ)です。
- 4番目のパラメータは、重要度(「ログレベル」または「優先度」とも呼ばれます)です。
- 5番目のパラメータはログメッセージです。
- 6番目と7番目のパラメータは、タグの数とタグの配列へのポインタです。タグは、デバイスの関連付けなどの追加のメタデータをログメッセージに追加するために使用されます。
- コールバック関数に対する最後のパラメータは、
SisoLog_RegisterLogMsgCallback()の呼び出し時に指定されたポインタであり、コンテキスト構造体やクラスへのポインタ(たとえば、ユーザーアプリケーションを表すクラスインスタンスのthisポインタ)として使用できます。
コールバック関数を登録した後、アプリケーションは SisoLog_SetMode() を呼び出して SISOLOG_MODE_DEFAULT を呼び出して、ログメッセージの転送を有効にする必要があります。
ログメッセージの受信停止#
int SisoLog_RegisterLogMsgCallback(
FuncType_LogMsgCallback * callback,
void * userdata);
int SisoLog_SetMode(
unsigned int mode);
int SisoLog_FreeLibrary();
Framegrabber SDKのログメッセージシステムからのログメッセージの受信を停止するには:
- ログメッセージの転送を無効にするには、
SisoLog_SetMode()を呼び出してSISOLOG_MODE_OFF. - を呼び出してコールバック関数の登録を解除します。
SisoLog_RegisterLogMsgCallback()を呼び出してnullptrコールバック関数とユーザーコンテキストポインタの両方に対して行います。 - アプリケーションを終了する前に、
SisoLog_FreeLibrary().