1つのexeと2つのDLLで構成されるMFCアプリケーションがあります。 exeはこれら2つのDLLから関数を呼び出します。今私はPantheiosロギングlibを使用していくつかのログを追加しようとしています。MFCアプリケーションを使用して1つのファイルにログインしているパンテオビシ(1つのexe + 2つのDLL)
達成したいこと:
exeと2つのDLLは、すべて同じログファイルにハードドライブでログしています。ここで
#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プログラムで暗黙のリンクを使用して
1)私は使用しました(このlinkを見て、その後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にまったくログイン得ることができない、それは単に、各ログ呼び出しのerrosを与える:トークンを言って
pantheios::log_INFORMATIONAL(PSTR("testing message"));
はemtpyあるので、私は解決策Googleで検索し、見つかった:
2)IそれぞれDllMain
機能の中で各DLL初期化のために
を呼び出す必要があります。この方法では、DLLにログインしようとすると「空のトークン」エラーはなくなりますが、ログファイルにDLLによって記録されたものは何もありません(再度、メインのexeプログラムは問題ありません)。
3)私は少しのものを微調整し、私は彼らのすべてが別のファイルにログを記録してDLLのloggingsでログファイル名を変更する必要があります。
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つのログファイルのすべてを持ってこの方法:
-
メインプログラムのDLL#用
- TestLogDll1.logため
- TestLog.log 1
- TestLogDll2.log DLLの#2
しかし、それでもまだ、私はちょうど同じファイルへのロギングの両方のDLLを取得することはできませんメインEXEは(TestLog.log)です。