⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fixlogfilesthread1.cpp

📁 自动识别并解析IIS、W3C、NSCA、APACHE等格式的日志文件的CB代码段。
💻 CPP
📖 第 1 页 / 共 4 页
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Fix_ServerLogs1.h"
#include "FixLogFilesThread1.h"
#include "Fix_InfoMuster1.h"
#include "Fix_InfoRelacing1.h"

#include <stdlib.h>
#include <stdio.h>

#pragma package(smart_init)
//---------------------------------------------------------------------------

//   Important: Methods and properties of objects in VCL can only be
//   used in a method called using Synchronize, for example:
//
//      Synchronize(UpdateCaption);
//
//   where UpdateCaption could look like:
//
//      void __fastcall TFixLogFilesThread::UpdateCaption()
//      {
//        Form1->Caption = "Updated in a thread";
//      }
//---------------------------------------------------------------------------
__fastcall TFixLogFilesThread::~TFixLogFilesThread()
{
        if(usermodebuf!=NULL)
                FreeModebuf((TFIX_DEFMODE_INFO*)usermodebuf);
}


__fastcall TFixLogFilesThread::TFixLogFilesThread(void* thwnd,void* tstream,void* tinfobuf,void* tshowstatus,bool CreateSuspended,int fixtype)
        : TThread(CreateSuspended)
{
        fixselecttype=fixtype;
        msghwnd=thwnd;
        msgstream=(TStream*)tstream;
        msginfobuf=tinfobuf;
        msgshowstatus=tshowstatus;
        exits=false;
        usermodebuf=NULL;
        lasttime="";
        Priority=tpHigher;//tpNormal;//tpLower;//st;//tpLower;
        //Priority=tpLowest;//tpLower;
}
//---------------------------------------------------------------------------
AnsiString TFixLogFilesThread::getiisdata(CFIELD_DEFINE* finfo,CLOGS_FIX_BUF_INFO* info,AnsiString buf,int ftype,TDateTime standtime)
{
        AnsiString tmps="";
        int kk=0;
        int kk1=0;
        AnsiString cks="";
        AnsiString tims;
        for(int mi=1;mi<buf.Length();mi++)
        {
                bool bz=true;
                if(buf[mi]==char(0x20))
                {
                        bz=false;
                        int i=tmps.Length();
                        if(i>1)
                        {
                                if(tmps[i]==char(0x2c))
                                        tmps=tmps.Delete(i,1);
                        }
                }
                else if(buf[mi]==char(0x0a))
                {
                        bz=false;
                        int i=tmps.Length();
                        if(i>1)
                        {
                                if(tmps[i-1]==char(0x2c))
                                        tmps=tmps.Delete(i-1,2);
                        }
                }
                else
                        tmps+=buf[mi];
                if(!bz)
                {
                        kk1++;
                        if(kk1==3)
                                tims=tmps;
                        else
                        {
                                if(kk1==4)
                                        tmps=tims+" "+tmps;
                                info->field[kk]=tmps;
                                if(finfo->fieldname[kk].Pos("cs-uri")>0)
                                        cks+=tmps;
                                kk++;
                        }
                        tmps="";
                }
        }
        lasttime=info->field[2];
        return cks;
}

AnsiString  TFixLogFilesThread::getw3cdata(CFIELD_DEFINE* finfo,CLOGS_FIX_BUF_INFO* info,AnsiString buf,int ftype,TDateTime standtime)
{
        AnsiString cks="";
        for(int mi=0;mi<30;mi++)
        {
                if(!finfo->fieldusebz[mi])
                        continue;
                int i=buf.Pos(char(0x20));
                AnsiString s=buf.SubString(1,i-1);
                buf=buf.Delete(1,i);
                if(finfo->fieldname[mi]=="datetime")
                {
                        if(finfo->fieldstr.SubString(8,4)=="time")
                        {
                                i=buf.Pos(char(0x20));
                                AnsiString s1=buf.SubString(1,i-1);
                                buf=buf.Delete(1,i);
                                s=s+" "+s1;
                        }
                        lasttime=s;
                }
                info->field[mi]=s;
                if(finfo->fieldname[mi].Pos("cs-uri")>0)
                        cks+=s;
        }
        return cks;
}

AnsiString  TFixLogFilesThread::getnscadata(CFIELD_DEFINE* finfo,CLOGS_FIX_BUF_INFO* info,AnsiString buf,int ftype,TDateTime standtime)
{
        AnsiString cks="";
        int i=buf.Pos(" ");
        info->field[0]=buf.SubString(1,i-1);
        buf=buf.Delete(1,i);
        i=buf.Pos(" ");
        info->field[1]=buf.SubString(1,i-1);
        buf=buf.Delete(1,i);
        i=buf.Pos(" ");
        info->field[2]=buf.SubString(1,i-1);
        buf=buf.Delete(1,i);
        i=buf.Pos("]");
        info->field[3]=fixncsatime(buf.SubString(1,i),"datetime1");
        buf=buf.Delete(1,i+2);
        lasttime=info->field[3];
        i=buf.Pos("\" ");
        AnsiString s=buf.SubString(1,i-1);
        buf=buf.Delete(1,i+1);
        i=s.Pos(" ");
        info->field[4]=s.SubString(1,i-1);
        s=s.Delete(1,i);
        AnsiString s1="";
        int len=s.Length();
        for(int k=len;k>0;k--)
        {
                AnsiString s2=s.SubString(k,1);
                if(s2==" ")
                        break;
                else
                {
                        s1=s2+s1;
                        s=s.Delete(k,1);
                }
        }
        cks=s;
        i=s.Pos("?");
        if(i>0)
        {
                info->field[5]=s.SubString(1,i-1);
                s=s.Delete(1,i);
                info->field[6]=s;
        }
        else
                info->field[5]=s;
        info->field[7]=s1;
        i=buf.Pos(" ");
        info->field[8]=buf.SubString(1,i-1);
        buf=buf.Delete(1,i);
        info->field[9]=buf;
        return cks;
}

AnsiString  TFixLogFilesThread::getapacheerdata(CFIELD_DEFINE* finfo,CLOGS_FIX_BUF_INFO* info,AnsiString buf,int ftype,TDateTime standtime)
{
        AnsiString cks="";
        int i=buf.Pos("]");
        info->field[0]=fixncsatime(buf.SubString(1,i),"datetime2");
        buf=buf.Delete(1,i);
        lasttime=info->field[0];
        buf=buf.Trim();
        i=buf.Pos("]");
        info->field[1]=buf.SubString(2,i-2);
        buf=buf.Delete(1,i);
        buf=buf.Trim();
        i=buf.Pos("]");
        AnsiString s=buf.SubString(2,i-2);
        buf=buf.Delete(1,i);
        buf=buf.Trim();
        i=s.Pos(" ");
        s=s.Delete(1,i);
        info->field[2]=s;
        info->field[3]=buf;
        cks=buf;
        return cks;
}

AnsiString  TFixLogFilesThread::getselfdata(CFIELD_DEFINE* finfo,CLOGS_FIX_BUF_INFO* info,AnsiString buf,int ftype,TDateTime standtime)
{
        AnsiString cks="";
        AnsiString tmps=finfo->fieldstr;
        int fcn=0;
        while(1)
        {
                if(tmps.IsEmpty() || (fcn>29) || buf.IsEmpty())
                        break;
                int ln=tmps.Pos("%");
                if(ln>1)
                        buf=buf.Delete(1,ln-1);
                tmps=tmps.Delete(1,ln);
                ln=tmps.Pos("%");
                AnsiString sn;
                if(ln>0)
                {
                        sn=tmps.SubString(1,ln-1);
                        tmps=tmps.Delete(1,ln-1);
                }
                else
                {
                        sn=tmps;
                        tmps="";
                }
                sn=sn.Trim();
                if(sn.IsEmpty())
                        break;
                AnsiString fgs="";
                while(1)
                {
                        char c0=sn[sn.Length()];
                        bool dbz=false;
                        if((!((c0==')') || (c0=='-') || ((c0>='A') && (c0<='Z')) || ((c0>='a') && (c0<='z')) || ((c0>='0') && (c0<='9')))))
                        {
                                dbz=true;
                                sn=sn.Delete(sn.Length(),1);
                                AnsiString xxx=c0;
                                fgs=xxx+fgs;
                        }
                        if(sn.IsEmpty())
                                break;
                        c0=sn[1];
                        if((!((c0==')') || (c0=='-') || ((c0>='A') && (c0<='Z')) || ((c0>='a') && (c0<='z')) || ((c0>='0') && (c0<='9')))))
                        {
                                dbz=true;
                                sn=sn.Delete(1,1);
                        }
                        if(sn.IsEmpty() || !dbz)
                        break;
                }
                AnsiString buft="";
                if(tmps.IsEmpty())
                {
                        buft=buf;
                        buf="";
                }
                else
                {
                        if(fgs.IsEmpty())
                                fgs=" ";

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -