1 つの exe と 2 つの DLL で構成される MFC アプリを取得しました。exe は、これら 2 つの DLL から関数を呼び出します。現在、Pantheios ロギング ライブラリを使用してロギングを追加しようとしています。
達成したいこと:
exe と 2 つの DLL はすべて、ハード ドライブの同じログ ファイルに記録されます。
これが私がやったことです:
1) メインの exe プログラムで暗黙的なリンクを使用する:
#include "stdafx.h"
#include <pantheios/implicit_link/core.h>
#include <pantheios/implicit_link/fe.simple.h>
#include <pantheios/implicit_link/be.file.h>
#define USER_SPECIFIED_LEVEL
#ifndef USER_SPECIFIED_LEVEL
#include <pantheios/implicit_link/fe.simple.h>
#endif
#ifdef USER_SPECIFIED_LEVEL
PANTHEIOS_CALL(int) pantheios_fe_init(void* reserved,void** ptoken)
{
*ptoken = NULL;
return 0;
}
PANTHEIOS_CALL(void) pantheios_fe_uninit(void* token)
{}
PANTHEIOS_CALL(PAN_CHAR_T const*) pantheios_fe_getProcessIdentity (void * token)
{
return PANTHEIOS_LITERAL_STRING(MY_PROGRAM_ID);
}
PANTHEIOS_CALL(int) pantheios_fe_isSeverityLogged(void* token
, int severity
, int backEndId)
{
//SEV_CRITICAL=2 < SEV_ERROR=3 < SEV_WARNING=4 < SEV_INFORMATIONAL=6
if(severity <= pantheios::SEV_INFORMATIONAL)
return 1;//allow output for anything above information lvl
return 0;
}
#endif
私が使用するロギングを追加する必要があるメインのexeプログラムで(SOの話でこのリンクPANTHEIOS_BE_FILE_F_SHARE_ON_WINDOWS
を見た後):
pantheios_be_file_setFilePath(PSTR("C:\\TestLog.log"),**PANTHEIOS_BE_FILE_F_SHARE_ON_WINDOWS**, 0, PANTHEIOS_BEID_ALL);
pantheios::log_NOTICE(PSTR("process id: ["), pantheios::processId, PSTR("]"));
pantheios::log_NOTICE(PSTR("thread id: ["), pantheios::threadId, PSTR("]"));
pantheios::log_INFORMATIONAL(PSTR("testing log messagse"));
これは正常に機能し、期待どおりに c:\TestLog.log ファイルにログを記録できます。ただし、これら 2 つの DLL でログをまったく取得できません。ログの呼び出しごとにエラーが発生するだけです。
pantheios::log_INFORMATIONAL(PSTR("testing message"));
トークンが空だと言ったので、Googleで解決策を見つけました:
2) 私は電話する必要があります:
pantheios::init();
DllMain
関数内の各 DLL 初期化に対して。このようにして、DLL にログインしようとしたときに「空のトークン」エラーは発生しなくなりましたが、DLL によってログ ファイルに記録されたものはまだありません (メインの exe プログラムは問題ありません)。
3) 少し調整したので、DLL ログのログ ファイル名を変更して、すべてのログが別のファイルに記録されるようにする必要があります。
DLL #1:
pantheios_be_file_setFilePath(PSTR("C:\\TestLogDll1.log"),PANTHEIOS_BE_FILE_F_SHARE_ON_WINDOWS, 0, PANTHEIOS_BEID_ALL);
DLL #2:
pantheios_be_file_setFilePath(PSTR("C:\\TestLogDll2.log"),PANTHEIOS_BE_FILE_F_SHARE_ON_WINDOWS, 0, PANTHEIOS_BEID_ALL);
このようにして、3 つのログ ファイルがすべて正常に動作しています。
- メイン プログラムの TestLog.log
- DLL #1 の TestLogDll1.log
- DLL #2 の TestLogDll2.log
それでも、両方の DLL をメインの exe ファイル (TestLog.log) と同じファイルに記録することはできません。