2012-04-24 9 views
0

1つのexeと2つのDLLで構成されるMFCアプリケーションがあります。 exeはこれら2つのDLLから関数を呼び出します。今私はPantheiosロギングlibを使用していくつかのログを追加しようとしています。MFCアプリケーションを使用して1つのファイルにログインしているパンテオビシ(1つのexe + 2つのDLL)

達成したいこと:
exeと2つのDLLは、すべて同じログファイルにハードドライブでログしています。ここで

は、私がやっていることです:私はロギングを追加する必要がメインの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プログラムで暗黙のリンクを使用して

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)です。

答えて

関連する問題