2

まず、log4cplus のソース コードに感謝します。

私は次のように1つの問題に直面しています:

私は何をしようとしていますか?メッセージをWindowsのイベントログに記録したい。

私は何をしましたか?次の.hを含めることで、イベントログを有効にすることができました

          #include <log4cplus/nteventlogappender.h>

そして、次のようにアペンダーを作成します。

          SharedAppenderPtr append_3(new NTEventLogAppender(LOG4CPLUS_TEXT("127.0.0.1"), LOG4CPLUS_TEXT("log"), LOG4CPLUS_TEXT("source")));
          append_3->setName(LOG4CPLUS_TEXT("ToEventlog"));

          Logger to_eventlog = Logger::getInstance(LOG4CPLUS_TEXT("to_eventlog"));
          to_eventlog.addAppender(append_3);
          to_eventlog.setLogLevel(log4cplus::ALL_LOG_LEVEL);

そして、次のようにログインします

         Logger to_eventlog = Logger::getInstance(LOG4CPLUS_TEXT("to_eventlog"));
         LOG4CPLUS_FATAL(to_eventlog, “Test Message.”);

メッセージをログに記録すると、イベント ログに次のように表示されます。


ソース source からのイベント ID 4096 の説明が見つかりません。このイベントを発生させるコンポーネントがローカル コンピューターにインストールされていないか、インストールが破損しています。コンポーネントをローカル コンピューターにインストールまたは修復できます。

イベントが別のコンピューターで発生した場合、表示情報をイベントと共に保存する必要がありました。

イベントには次の情報が含まれていました。

テスト メッセージ。

メッセージ リソースは存在しますが、文字列/メッセージ テーブルにメッセージが見つかりません


NTEventLogAppender.dll という名前の dll を文字列テーブル リソースと ID 4096 の文字列 (log4cplus の nteventlogappender.cxx ファイルにハードコードされている) で作成しようとしましたが、リソースのみの dll (/NOENTRY) でコンパイルしましたが、それでも上に行き続けますエラー。

すでに log4cplus-devel@lists.sourceforge.net に質問を試みましたが、まだ回答が得られませんでした。

この dll の作成方法に関するヘルプをいただければ幸いです。

ありがとう。

4

1 に答える 1

1

これが私がこの問題を解決した方法です:

コマンドを使用して NTEventLogAppender.mc ファイルをコンパイル:

mc -U NTEventLogAppender.mc
rc -r NTEventLogAppender.rc
link -dll -noentry -out:NTEventLogAppender.dll NTEventLogAppender.res

NTEventLogAppender.mc の内容は次のとおりです。


MessageIdTypedef=DWORD

SeverityNames=(Success=0x0:STATUS_SEVERITY_SUCCESS
Informational=0x1:STATUS_SEVERITY_INFORMATIONAL
Warning=0x2:STATUS_SEVERITY_WARNING
Error=0x3:STATUS_SEVERITY_ERROR
)


FacilityNames=(System=0x0:FACILITY_SYSTEM
Runtime=0x2:FACILITY_RUNTIME
Stubs=0x3:FACILITY_STUBS
Io=0x4:FACILITY_IO_ERROR_CODE
)

LanguageNames=(English=0x409:MSG00409)

; // The following are message definitions.

MessageId=0x1000
SymbolicName=SVC_TEST
Language=English
A message for something.
.

; // A message file must end with a period on its own line
; // followed by a blank line.

NTEventLogAppender.dll を c:\windows\system32 にコピーし、上記のテスト プログラムを実行したところ、イベント ログがメッセージ リソースを正しく検出したことがわかりました。

次の.regファイルをコピーして同じを実行して、このdllを登録する必要があります

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\log\source]
"EventMessageFile"="C:\\windows\\system32\\NTEventLogAppender.dll"
"CategoryMessageFile"="C:\\windows\\system32\\NTEventLogAppender.dll"
"TypesSupported"=dword:00000007
"CategoryCount"=dword:00000005

于 2011-08-04T20:45:30.917 に答える