TDBAppenderUnit.pas 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. {
  2. Copyright 2005-2006 Log4Delphi Project
  3. Licensed under the Apache License, Version 2.0 (the "License");
  4. you may not use this file except in compliance with the License.
  5. You may obtain a copy of the License at
  6. http://www.apache.org/licenses/LICENSE-2.0
  7. Unless required by applicable law or agreed to in writing, software
  8. distributed under the License is distributed on an "AS IS" BASIS,
  9. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  10. See the License for the specific language governing permissions and
  11. limitations under the License.
  12. }
  13. {*----------------------------------------------------------------------------
  14. Contains the TDbAppender class.
  15. @version 0.5
  16. @author <a href="mailto:Bartosz.Tomasik@gmail.com">Bartosz Tomasik</a>
  17. @author <a href="mailto:tcmiller@users.sourceforge.net">Trevor Miller</a>
  18. ----------------------------------------------------------------------------}
  19. unit TDBAppenderUnit;
  20. {$ifdef fpc}
  21. {$mode objfpc}
  22. {$h+}
  23. {$endif}
  24. interface
  25. uses
  26. TDBLogInserterUnit, TAppenderUnit, TLoggingEventUnit, TLogLogUnit;
  27. type
  28. {*----------------------------------------------------------------------------
  29. DbAppender appends log events to a database.
  30. ----------------------------------------------------------------------------}
  31. TDbAppender = class (TAppender)
  32. protected
  33. FDBLogInserter: TDBLogInserter;
  34. public
  35. constructor Create; Overload;
  36. constructor Create(ADBLogInserter:TDBLogInserter); Overload;
  37. destructor Destroy; Override;
  38. procedure Close();
  39. procedure Append(AEvent : TLoggingEvent); Override;
  40. procedure SetDbLogInserter(ADBLogInserter : TDBLogInserter);
  41. function RequiresLayout() : Boolean; Override;
  42. end;
  43. implementation
  44. constructor TDbAppender.Create();
  45. begin
  46. inherited Create;
  47. Self.FName := ClassName;
  48. Self.FDBLogInserter := Nil;
  49. TLogLog.debug('TDBAppender#Create');
  50. end;
  51. constructor TDbAppender.Create(ADBLogInserter:TDBLogInserter);
  52. begin
  53. inherited Create;
  54. Self.FName := ClassName;
  55. Self.FDBLogInserter := ADBLogInserter;
  56. TLogLog.debug('TDBAppender#Create');
  57. end;
  58. destructor TDbAppender.Destroy;
  59. begin
  60. if not Self.FClosed then
  61. Self.Close;
  62. FDBLogInserter.Free;
  63. TLogLog.debug('TDBAppender#Destroy');
  64. inherited Destroy;
  65. end;
  66. procedure TDbAppender.Close();
  67. begin
  68. if not (Self.FClosed) then
  69. Self.FClosed := true;
  70. end;
  71. procedure TDbAppender.Append(AEvent : TLoggingEvent);
  72. begin
  73. if (Self.FClosed) then begin
  74. if (Self.FErrorHandler <> Nil) then
  75. Self.FErrorHandler.Error(
  76. 'This appender is closed and cannot be written to.');
  77. Exit;
  78. end;
  79. if Assigned(FDBLogInserter) then
  80. FDBLogInserter.doInsert(AEvent);
  81. end;
  82. procedure TDbAppender.SetDbLogInserter(ADBLogInserter : TDBLogInserter);
  83. begin
  84. if Assigned(FDBLogInserter) then
  85. Self.FDBLogInserter.Free;
  86. Self.FDBLogInserter := ADBLogInserter;
  87. end;
  88. function TDbAppender.RequiresLayout() : Boolean;
  89. begin
  90. Result := false;
  91. end;
  92. end.