Login ProductsSalesSupportDownloadsAbout |
Home » Technical Support » DBISAM Technical Support » Support Forums » DBISAM Client/Server » View Thread |
Messages 1 to 2 of 2 total |
Log to DBISAM table |
Fri, May 19 2017 11:37 AM | Permanent Link |
Shedden | Hi All,
I needed to be able to query server log files, so I wrote a bit of code and thought it might help someone else. Its not complete, just to get you started. Sorry, I'm a C++ guy.... In reading the forums, I noticed someone asking for something like this, but I couldn't find the thread again to attach this to. As always, use at your own peril! It's nice to be able to transfer the table information to Excel and discuss it with a client. Debugging is hard enough from the server side. AnsiString TForm1::nameLogCategory(TLogCategory t) { AnsiString rslt=""; switch(t) { case lcInformation: rslt="Information"; break; case lcWarning: rslt="Warning"; break; case lcError: rslt="Error"; break; } return(rslt); } AnsiString TForm1::nameLogEvent(TLogEventType t) { AnsiString rslt=""; switch(t) { case leNone: rslt="None"; break; case leServerStart: rslt="ServerStart"; break; case leServerStop: rslt="ServerStop"; break; case leConnect: rslt="Connect"; break; case leReconnect: rslt="Reconnect"; break; case leDisconnect: rslt="Disconnect"; break; case leLogin: rslt="Login"; break; case leLogout: rslt="Logout"; break; case leDeadSession: rslt="DeadSession"; break; case leNoSession: rslt="NoSession"; break; case leAddressBlock: rslt="AddressBlock"; break; case leMaxConnect: rslt="MaxConnect"; break; case leInvalidLogin: rslt="InvalidLogin"; break; case leLoginDenied: rslt="LoginDenied"; break; case leConfiguration: rslt="Configuration"; //loading or saving server config file break; case leScheduledEvent: rslt="ScheduledEvent"; break; case leEncryptionMismatch: rslt="EncryptionMismatch"; break; case leVersionMismatch: rslt="VersionMismatch"; break; } return(rslt); } void TForm1::getParseServerLog() { TDBISAMTable* tbl = new TDBISAMTable(NULL); TLogRecord logRec; int remoteLogCount; int idx; AnsiString s; setStatusBar("Retrieving Server Log..."); tbl->SessionName="localData"; tbl->Active = false; tbl->DatabaseName=fldRptDir->Text; tbl->TableName = "serverLog"; tbl->FieldDefs->Clear(); if(tbl->Exists) tbl->DeleteTable(); TDBISAMFieldDef *pNewDef = tbl->FieldDefs->AddFieldDef(); pNewDef->Name = "time"; pNewDef->DataType = ftDateTime; pNewDef = tbl->FieldDefs->AddFieldDef(); pNewDef->Name = "user"; pNewDef->DataType = ftString; pNewDef->Size=30; pNewDef = tbl->FieldDefs->AddFieldDef(); pNewDef->Name = "address"; pNewDef->DataType = ftString; pNewDef->Size=16; //spec says 60, who knows why change if it truncates pNewDef = tbl->FieldDefs->AddFieldDef(); pNewDef->Name = "session"; pNewDef->DataType = ftInteger; pNewDef = tbl->FieldDefs->AddFieldDef(); pNewDef->Name = "thread"; pNewDef->DataType = ftInteger; pNewDef = tbl->FieldDefs->AddFieldDef(); pNewDef->Name = "category"; pNewDef->DataType = ftString; pNewDef->Size=11; pNewDef = tbl->FieldDefs->AddFieldDef(); pNewDef->Name = "event"; pNewDef->DataType = ftString; pNewDef->Size=18; pNewDef = tbl->FieldDefs->AddFieldDef(); pNewDef->Name = "text"; pNewDef->DataType = ftString; pNewDef->Size=255; //limited to short string by server implementation pNewDef = tbl->FieldDefs->AddFieldDef(); pNewDef->Name = "request"; pNewDef->DataType = ftString; pNewDef->Size=30; pNewDef = tbl->FieldDefs->AddFieldDef(); pNewDef->Name = "ServerVersion"; pNewDef->DataType = ftFloat; pNewDef = tbl->FieldDefs->AddFieldDef(); pNewDef->Name = "ClientVersion"; pNewDef->DataType = ftFloat; pNewDef = tbl->FieldDefs->AddFieldDef(); pNewDef->Name = "encrypted"; pNewDef->DataType = ftBoolean; //__________create table tbl->IndexDefs->Clear(); tbl->CreateTable(); tbl->Exclusive=true; tbl->Active=true; // remoteAdmin->Active=true; remoteLogCount=remoteAdmin->GetRemoteLogCount(); for(idx=1; idx<=remoteLogCount; idx++) { logRec=remoteAdmin->GetRemoteLogRecord(idx); tbl->Append(); tbl->FieldByName("time")->AsDateTime=logRec.DateTime; s=logRec.ClientUser; tbl->FieldByName("user")->AsAnsiString=s; s=logRec.ClientAddress; tbl->FieldByName("address")->AsAnsiString=s; tbl->FieldByName("session")->AsInteger=logRec.ClientSession; tbl->FieldByName("thread")->AsInteger=logRec.ClientThread; s=nameLogCategory(logRec.Category); tbl->FieldByName("category")->AsAnsiString=s; s=nameLogEvent(logRec.EventType); tbl->FieldByName("event")->AsAnsiString=s; s=logRec.Text; tbl->FieldByName("text")->AsAnsiString=s; s=logRec.ClientRequestName; tbl->FieldByName("request")->AsAnsiString=s; tbl->FieldByName("ServerVersion")->AsFloat=logRec.ServerVersion; tbl->FieldByName("ClientVersion")->AsFloat=logRec.ClientVersion; tbl->FieldByName("encrypted")->AsBoolean=logRec.ClientEncrypted; tbl->Post(); } tbl->Active=false; remoteAdmin->Active=false; delete tbl; setStatusBar("Done."); } All the best, Jim Shedden |
Fri, May 19 2017 2:05 PM | Permanent Link |
Tim Young [Elevate Software] Elevate Software, Inc. timyoung@elevatesoft.com | James,
<< I needed to be able to query server log files, so I wrote a bit of code and thought it might help someone else. Its not complete, just to get you started. Sorry, I'm a C++ guy.... In reading the forums, I noticed someone asking for something like this, but I couldn't find the thread again to attach this to. As always, use at your own peril! It's nice to be able to transfer the table information to Excel and discuss it with a client. Debugging is hard enough from the server side. >> Nice, thanks for the code. Tim Young Elevate Software www.elevatesoft.com |
This web page was last updated on Tuesday, September 17, 2024 at 04:19 AM | Privacy PolicySite Map © 2024 Elevate Software, Inc. All Rights Reserved Questions or comments ? E-mail us at info@elevatesoft.com |