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

📄 logwriter.pas

📁 程 序 日 志 LogWriter.pas
💻 PAS
字号:
unit LogWriter;

interface
uses
    Messages, classes, SysUtils, Windows, Dialogs,adodb,db,IniFiles,Forms,LockPwd,CommDeclare;

const
    FILENAME = 'Logger';
type
    TLogLevel = (
        LEVEL_OFF,
		    LEVEL_SEVERE,
		    LEVEL_WARNING,
		    LEVEL_INFO,
		    LEVEL_CONFIG,
		    LEVEL_FINE,
		    LEVEL_FINER,
		    LEVEL_FINEST
    ); 

    TLogWriter = Class
    private
		    m_csLogFileSync : TRTLCriticalSection;
		    m_strLogFileName : string;
        con:tadoconnection;
        qry:tadoquery;
        ini:Tinifile;
        function GetLevelNames(level : TLogLevel) : string;
    public
        constructor Create;
        destructor Destroy; override;
		    procedure Log(level :TLogLevel ;ModuleID:integer; qry1:tadoquery);
		    procedure RemoveLastMonthFile();
		    procedure SetLogFileName(strLogFileName : string);
    end;
    function GetLogger() : TLogWriter;
    procedure FINEST_LOG (ModuleID : integer;qry1:tadoquery);
    procedure FINER_LOG  (ModuleID : integer;qry1:tadoquery);
    procedure CONFIG_LOG (ModuleID : integer;qry1:tadoquery);
    procedure INFO_LOG   (ModuleID : integer;qry1:tadoquery);
    procedure WARNING_LOG(ModuleID : integer;qry1:tadoquery);
    procedure SEVERE_LOG (ModuleID : integer;qry1:tadoquery);

implementation
var
    m_Logger : TLogWriter ;

{ TLogWriter }

constructor TLogWriter.Create;
begin
    InitializeCriticalSection(m_csLogFileSync);
    m_strLogFileName := FILENAME;
    ini:=Tinifile.Create(ExtractFilePath(Application.ExeName)+'Setup.ini');
    con:=tadoconnection.Create(nil);
    con.LoginPrompt:=false;con.ConnectionString:=
   'Provider=SQLOLEDB.1;Password='+ Dec(ini.ReadString('Setup','Password',''))+
   ';Persist Security Info=True;User ID='+ini.ReadString('Setup','UserName','')+
   ';Initial Catalog='+ini.ReadString('Setup','DataBaseName','')+
   ';Data Source='+ini.ReadString('Setup','ServerName','');
   qry:=tadoquery.Create(nil);qry.Connection:=con;
end;

destructor TLogWriter.Destroy;
begin
    DeleteCriticalSection(m_csLogFileSync);
    con.Free;qry.Free;ini.Free;
    inherited Destroy;
end;

function TLogWriter.GetLevelNames(level: TLogLevel): string;
begin
    Result := '';
    case level of
    LEVEL_OFF     : Result := '[OFF]    ';
    LEVEL_SEVERE  : Result := '[SEVERE] ';
    LEVEL_WARNING : Result := '[WARNING]';
    LEVEL_INFO    : Result := '[INFO]   ';
    LEVEL_CONFIG  : Result := '[CONFIG] ';
    LEVEL_FINE    : Result := '[FINE]   ';
    LEVEL_FINER   : Result := '[FINER]  ';
    LEVEL_FINEST  : Result := '[FINEST] ';
    end;
end;

procedure TLogWriter.Log(level: TLogLevel;ModuleID:integer;qry1:tadoquery);
var
    strMessage : string;
    strFileName : string;
    hFile : THandle;
    systime : _SYSTEMTIME;
    dwNumBytesWritten : DWORD;
    LogFile : TextFile;
    info:string;
    i:integer;
begin
    if (level > LEVEL_FINEST) then exit;

	  EnterCriticalSection(m_csLogFileSync);
    strFileName := m_strLogFileName + FormatDateTime('yyyymmdd',Now) + '.txt';

    if   ModuleID<=100 then
    begin
      info:=''; if ModuleID=0 then info:='KYE MES System Login' else  info:='KYE MES System LoginOut';
    try
    qry.Close; qry.SQL.Clear;
    qry.SQL.add('insert into LOG_INFO(ACCOUNT_ID,MODULEID,OPERATION)values('
    +''''+_userName+''''+','+''''+inttostr(ModuleID)+''''+','+''''+info+''''+')');
    qry.ExecSQL ;
    except  
    end ;
    end
    else
    begin
         if  qry1.State in[dsInsert,dsEdit] then
         begin
              info:='';if qry1.State=dsInsert then info:='Insert: ' else info:='Edit: ';
              for i:=0 to  qry1.FieldCount-1 do
              begin
                info:=info+qry1.Fields[i].FieldName+':'+qry1.Fields[i].AsString+';';
              end;
              qry.Close; qry.SQL.Clear;
              qry.SQL.add('insert into LOG_INFO(ACCOUNT_ID,MODULEID,OPERATION)values('
              +''''+_userName+''''+','+''''+inttostr( ModuleID)+''''+','+''''+info+''''+')');
              qry.ExecSQL ;
         end
         else
         begin
              info:='';info:='Delete: ';
              for i:=0 to  qry1.FieldCount-1 do
              begin
                info:=info+qry1.Fields[i].FieldName+':'+qry1.Fields[i].AsString+';';
              end;
              qry.Close; qry.SQL.Clear;
              qry.SQL.add('insert into LOG_INFO(ACCOUNT_ID,MODULEID,OPERATION)values('
              +''''+_userName+''''+','+''''+inttostr( ModuleID)+''''+','+''''+info+''''+')');
              qry.ExecSQL ;
         end
    end;
    dwNumBytesWritten := 0;
	  RemoveLastMonthFile();
	  LeaveCriticalSection(m_csLogFileSync);
end;

procedure TLogWriter.RemoveLastMonthFile;
begin

end;

procedure TLogWriter.SetLogFileName(strLogFileName: string);
begin
	  EnterCriticalSection(m_csLogFileSync);

    m_strLogFileName := strLogFileName;

	  LeaveCriticalSection(m_csLogFileSync);
end;

function GetLogger() : TLogWriter;
begin
    result := TLogWriter.Create;
end;

procedure FINEST_LOG(ModuleID : integer;qry1:tadoquery);
begin
    GetLogger.Log(LEVEL_FINEST,ModuleID, qry1);
end;

procedure FINER_LOG(ModuleID : integer;qry1:tadoquery);
begin
   GetLogger.Log(LEVEL_FINER, ModuleID,qry1);
end;

procedure CONFIG_LOG(ModuleID : integer;qry1:tadoquery);
begin
   GetLogger.Log(LEVEL_CONFIG,ModuleID, qry1);
end;

procedure INFO_LOG(ModuleID : integer;qry1:tadoquery);
begin
   GetLogger.Log(LEVEL_INFO,ModuleID, qry1);
end;

procedure WARNING_LOG(ModuleID : integer;qry1:tadoquery);
begin
   GetLogger.Log(LEVEL_WARNING,ModuleID, qry1);
end;
procedure SEVERE_LOG(ModuleID : integer;qry1:tadoquery);
begin
   GetLogger.Log(LEVEL_SEVERE,ModuleID, qry1);
end;

end.

⌨️ 快捷键说明

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