Pantheios 不使用 MFC 应用程序写入一个文件(一个 exe + 两个 DLL)

Pantheios not logging into one file with MFC app comprise (one exe + two DLLs)

本文关键字:一个 文件 exe DLL 两个 应用程序 MFC Pantheios      更新时间:2023-10-16

我有一个由一个exe和两个DLL组成的MFC应用程序。exe 从这两个 DLL 调用函数。现在我正在尝试使用 Pantheios 日志记录库添加一些日志记录。

我想要实现的目标:
exe 和两个 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 文件中。但是,我根本无法在这两个 DLL 中获取日志记录,它只是为每个日志记录调用提供错误:

    pantheios::log_INFORMATIONAL(PSTR("testing message"));

说令牌是emtpy,所以我用谷歌搜索并找到了一个解决方案:

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 个日志文件都可以正常工作:

  • 测试日志.log用于主程序
  • TestLogDll1.log for DLL #1
  • TestLogDll2.log for DLL #2

但是我仍然无法将两个 DLL 记录到与主可执行文件相同的文件中(TestLog.log)。

要在 exe 和 dll 之间共享实体或对象,您可能需要在导出它们的 exe 中声明 __declspec(dllexport),在导入它们的 dll 中声明__declspec(dllimport)。

供参考:
1) http://sourceforge.net/projects/pantheios/forums/forum/647484/topic/1639420/index/page/1
2)从dll使用Pantheios日志记录框架

相关文章: