lazarus-ccr/wst/trunk/file_logger_extension.pas

76 lines
1.9 KiB
ObjectPascal

{
This file is part of the Web Service Toolkit
Copyright (c) 2008 by Inoussa OUEDRAOGO
This file is provide under modified LGPL licence
( the files COPYING.modifiedLGPL and COPYING.LGPL).
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
}
{$INCLUDE wst_global.inc}
unit file_logger_extension;
interface
uses
Classes, SysUtils,
logger_extension;
type
{ TFileLoggerServiceExtension
This class require the "LogFileCompleteName" to be set to a valid
file place.
}
TFileLoggerServiceExtension = class(TLoggerServiceExtension)
protected
procedure TraceMessage(const AMsg : string);override;
end;
var
LogFileCompleteName : string;
implementation
uses
syncobjs, base_service_intf, server_service_intf;
var
StreamInstance : TStream = nil;
StreamInstanceLock : TCriticalSection = nil;
{ TFileLoggerServiceExtension }
procedure TFileLoggerServiceExtension.TraceMessage(const AMsg : string);
begin
if ( Length(AMsg) > 0 ) then begin
StreamInstanceLock.Acquire();
try
if ( StreamInstance = nil ) then begin
if ( Length(LogFileCompleteName) = 0 ) then
raise Exception.Create('"LogFileCompleteName" must be set for the TFileLoggerServiceExtension to work.');
StreamInstance := TFileStream.Create(LogFileCompleteName,fmCreate);
StreamInstance.Seek(0,soEnd);
end;
StreamInstance.Write(AMsg[1],Length(AMsg));
finally
StreamInstanceLock.Release();
end;
end;
end;
initialization
StreamInstanceLock := TCriticalSection.Create();
GetServiceExtensionRegistry().Register('TFileLoggerServiceExtension',TSimpleItemFactory.Create(TFileLoggerServiceExtension));
finalization
FreeAndNil(StreamInstance);
FreeAndNil(StreamInstanceLock);
end.