网狐6603加入log4cpp记录日志

1.准备好,使用vs2003编译出来的log4cpp.lib,我使用的是Release版,把它放到 系统模块\链接库\log4cpp.lib,把log4cpp的头文件放到"共享组件"目录下

2.选中“服务核心”项目,右键->属性->C/C++->常规->附加包含目录 加入 “$(SolutionDir)\共享组件”,链接器->常规->附加目录 加入 "$(SolutionDir)\链接库",链接器->输入->附加依赖项 加入"log4cpp.lib"。

3.在"服务核心"项目“头文件”中,加入 WHLogger.h

 1 #ifndef WH_LOGGER_HEAD_FILE
 2 #define WH_LOGGER_HEAD_FILE
 3 
 4 #pragma once
 5 
 6 #include "ServiceCoreHead.h"
 7 #include <string>
 8 using namespace std;
 9 
10 class SERVICE_CORE_CLASS CWHLogger
11 {
12 protected:
13     CWHLogger(){}
14 private:
15     static CWHLogger* p;
16 public:
17     static CWHLogger* initance();
18     void logMessage(string methordName,string strMessage);
19     string TCHAR2STRING(TCHAR *STR);
20 };
21 
22 //////////////////////////////////////////////////////////////////////////////////
23 
24 #endif

3.在"服务核心"项目“源文件”中,加入 WHLogger.cpp

 1 #include "stdafx.h"
 2 #include "WHLogger.h"
 3 #include "log4cpp/Category.hh"
 4 #include "log4cpp/OstreamAppender.hh"
 5 #include "log4cpp/BasicLayout.hh"
 6 #include "log4cpp/Priority.hh"
 7 #include "log4cpp/PatternLayout.hh"
 8 #include "log4cpp/FileAppender.hh"
 9 #include "log4cpp/RollingFileAppender.hh"
10 using namespace std;
11 
12 
13 CWHLogger* CWHLogger::p = new CWHLogger;
14 
15 CWHLogger* CWHLogger::initance()
16 {
17     return p;
18 }
19 
20 void CWHLogger::logMessage(string methordName,string strMessage)
21 {
22     //日志输出
23     log4cpp::PatternLayout* pLayout = new log4cpp::PatternLayout();
24     pLayout->setConversionPattern("%d: %p %c %x: %m%n");
25     log4cpp::RollingFileAppender* rollfileAppender = new log4cpp::RollingFileAppender(
26     "rollfileAppender","foxuc.log",5*1024,1);
27     rollfileAppender->setLayout(pLayout);
28     log4cpp::Category& root = log4cpp::Category::getRoot().getInstance(methordName);
29     root.addAppender(rollfileAppender);
30     root.setPriority(log4cpp::Priority::DEBUG);
31 
32     ostringstream oss;
33     oss<<strMessage;
34     root.info(oss.str());
35     log4cpp::Category::shutdown();
36 
37 }
38 
39 string CWHLogger::TCHAR2STRING(TCHAR *STR)
40 {
41    int iLen = WideCharToMultiByte(CP_ACP, 0,STR, -1, NULL, 0, NULL, NULL);
42    char* chRtn =new char[iLen*sizeof(char)];
43    WideCharToMultiByte(CP_ACP, 0, STR, -1, chRtn, iLen, NULL, NULL);
44    std::string str(chRtn);
45    return str;
46 }

4.修改 ServiceCoreHead.h 加入 #include "WHLogger.h"

 1 //导出文件
 2 
 3 #ifndef SERVICE_CORE_DLL
 4     #include "WHThread.h"
 5     #include "WHRegKey.h"
 6     #include "WHEncrypt.h"
 7     #include "WHService.h"
 8     #include "WHIniData.h"
 9     #include "WHDataQueue.h"
10     #include "WHDataLocker.h"
11     #include "WHCommandLine.h"
12     #include "WHLogger.h"
13 #endif

 

5.在“登录服务器”项目的 DataBaseEngineSink.cpp 中加入日志输出的测试代码,如下:

 1 //帐号登录
 2 bool CDataBaseEngineSink::OnRequestLogonAccounts(DWORD dwContextID, VOID * pData, WORD wDataSize)
 3 {
 4     try
 5     {
 6         //效验参数
 7         ASSERT(wDataSize==sizeof(DBR_GP_LogonAccounts));
 8         if (wDataSize!=sizeof(DBR_GP_LogonAccounts)) return false;
 9 
10         //请求处理
11         DBR_GP_LogonAccounts * pLogonAccounts=(DBR_GP_LogonAccounts *)pData;
12 
13         //执行判断
14         tagBindParameter * pBindParameter=(tagBindParameter *)pLogonAccounts->pBindParameter;
15         if (pBindParameter->dwSocketID!=dwContextID) return true;
16 
17         //转化地址
18         TCHAR szClientAddr[16]=TEXT("");
19         BYTE * pClientAddr=(BYTE *)&pLogonAccounts->dwClientAddr;
20         _sntprintf(szClientAddr,CountArray(szClientAddr),TEXT("%d.%d.%d.%d"),pClientAddr[0],pClientAddr[1],pClientAddr[2],pClientAddr[3]);
21 
22         //构造参数
23         m_AccountsDBAide.ResetParameter();
24         m_AccountsDBAide.AddParameter(TEXT("@strAccounts"),pLogonAccounts->szAccounts);
25         m_AccountsDBAide.AddParameter(TEXT("@strPassword"),pLogonAccounts->szPassword);
26         m_AccountsDBAide.AddParameter(TEXT("@strClientIP"),szClientAddr);
27         m_AccountsDBAide.AddParameter(TEXT("@strMachineID"),pLogonAccounts->szMachineID);
28         m_AccountsDBAide.AddParameter(TEXT("@nNeeValidateMBCard"),pLogonAccounts->cbNeeValidateMBCard);
29 
30         //日志输出
31         CWHLogger* whLogger = CWHLogger::initance();
32         string szAccountsStr = whLogger->TCHAR2STRING(pLogonAccounts->szAccounts);
33         string szPasswordStr = whLogger->TCHAR2STRING(pLogonAccounts->szPassword);
34         whLogger->logMessage("CDataBaseEngineSink::OnRequestLogonAccounts szAccounts",szAccountsStr);
35         whLogger->logMessage("CDataBaseEngineSink::OnRequestLogonAccounts szPassword",szPasswordStr);
36 
37         //输出参数
38         TCHAR szDescribeString[128]=TEXT("");
39         m_AccountsDBAide.AddParameterOutput(TEXT("@strErrorDescribe"),szDescribeString,sizeof(szDescribeString),adParamOutput);
40 
41         //执行查询
42         LONG lResultCode=m_AccountsDBAide.ExecuteProcess(TEXT("GSP_GP_EfficacyAccounts"),true);
43 
44         //结果处理
45         CDBVarValue DBVarValue;
46         m_AccountsDBModule->GetParameter(TEXT("@strErrorDescribe"),DBVarValue);
47         OnLogonDisposeResult(dwContextID,lResultCode,CW2CT(DBVarValue.bstrVal),false);
48 
49 
50         return true;
51     }
52     catch (IDataBaseException * pIException)
53     {
54         //错误信息
55         CTraceService::TraceString(pIException->GetExceptionDescribe(),TraceLevel_Exception);
56 
57         //错误处理
58         OnLogonDisposeResult(dwContextID,DB_ERROR,TEXT("由于数据库操作异常,请您稍后重试或选择另一服务器登录!"),false);
59 
60         return false;
61     }
62 
63     return true;
64 }

6.测试结果,生成了foxuc.log

7.其内容是:

2017-02-27 23:09:06,889: INFO CDataBaseEngineSink::OnRequestLogonAccounts szAccounts : ylfh
2017-02-27 23:09:06,890: INFO CDataBaseEngineSink::OnRequestLogonAccounts szPassword : 24943864FF3416777FA2958AC6ED9ACE

 

  

 

posted on 2017-02-28 19:13  一揽芳华  阅读(763)  评论(1编辑  收藏  举报

导航