网狐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