{
Copyright 2005-2006 Log4Delphi Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
}
{*----------------------------------------------------------------------------
Contains the TDbAppender class.
@version 0.5
@author Bartosz Tomasik
@author Trevor Miller
----------------------------------------------------------------------------}
unit TDBAppenderUnit;
{$ifdef fpc}
{$mode objfpc}
{$h+}
{$endif}
interface
uses
TDBLogInserterUnit, TAppenderUnit, TLoggingEventUnit, TLogLogUnit;
type
{*----------------------------------------------------------------------------
DbAppender appends log events to a database.
----------------------------------------------------------------------------}
TDbAppender = class (TAppender)
protected
FDBLogInserter: TDBLogInserter;
public
constructor Create; Overload;
constructor Create(ADBLogInserter:TDBLogInserter); Overload;
destructor Destroy; Override;
procedure Close();
procedure Append(AEvent : TLoggingEvent); Override;
procedure SetDbLogInserter(ADBLogInserter : TDBLogInserter);
function RequiresLayout() : Boolean; Override;
end;
implementation
constructor TDbAppender.Create();
begin
inherited Create;
Self.FName := ClassName;
Self.FDBLogInserter := Nil;
TLogLog.debug('TDBAppender#Create');
end;
constructor TDbAppender.Create(ADBLogInserter:TDBLogInserter);
begin
inherited Create;
Self.FName := ClassName;
Self.FDBLogInserter := ADBLogInserter;
TLogLog.debug('TDBAppender#Create');
end;
destructor TDbAppender.Destroy;
begin
if not Self.FClosed then
Self.Close;
FDBLogInserter.Free;
TLogLog.debug('TDBAppender#Destroy');
inherited Destroy;
end;
procedure TDbAppender.Close();
begin
if not (Self.FClosed) then
Self.FClosed := true;
end;
procedure TDbAppender.Append(AEvent : TLoggingEvent);
begin
if (Self.FClosed) then begin
if (Self.FErrorHandler <> Nil) then
Self.FErrorHandler.Error(
'This appender is closed and cannot be written to.');
Exit;
end;
if Assigned(FDBLogInserter) then
FDBLogInserter.doInsert(AEvent);
end;
procedure TDbAppender.SetDbLogInserter(ADBLogInserter : TDBLogInserter);
begin
if Assigned(FDBLogInserter) then
Self.FDBLogInserter.Free;
Self.FDBLogInserter := ADBLogInserter;
end;
function TDbAppender.RequiresLayout() : Boolean;
begin
Result := false;
end;
end.