diff --git a/Logger.ConsoleHandler.pp b/Logger.ConsoleHandler.pp
new file mode 100644
index 0000000..8016788
--- /dev/null
+++ b/Logger.ConsoleHandler.pp
@@ -0,0 +1,90 @@
+{*******************************************************}
+
+{ Renegade BBS }
+
+{ Copyright (c) 1990-2013 The Renegade Dev Team }
+{ Copyleft (ↄ) 2016-2017 Renegade BBS }
+
+{ This file is part of Renegade BBS }
+
+{ Renegade is free software: you can redistribute it }
+{ and/or modify it under the terms of the GNU General }
+{ Public License as published by the Free Software }
+{ Foundation, either version 3 of the License, or }
+{ (at your option) any later version. }
+
+{ Renegade 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. See the GNU General Public }
+{ License for more details. }
+
+{ You should have received a copy of the GNU General }
+{ Public License along with Renegade. If not, see }
+{ . }
+
+{*******************************************************}
+{ _______ __ }
+{ | _ .-----.-----.-----.-----.---.-.--| .-----. }
+{ |. l | -__| | -__| _ | _ | _ | -__| }
+{ |. _ |_____|__|__|_____|___ |___._|_____|_____| }
+{ |: | | |_____| }
+{ |::.|:. | }
+{ `--- ---' }
+{*******************************************************}
+{$mode objfpc}
+{$codepage utf8}
+{$h+}
+unit Logger.ConsoleHandler;
+
+interface
+
+uses
+ Classes,
+ SysUtils,
+ Logger.HandlerInterface;
+
+type
+ ConsoleHandler = class(TObject, LoggingHandlerInterface)
+ Private
+ LogIdentifier : UTF8String;
+ Public
+ constructor Create();
+ destructor Destroy();
+ function Open(Identifier: UTF8String): boolean;
+ function Close(): boolean;
+ function Write(const LogData: UTF8String): boolean;
+ end;
+
+implementation
+
+constructor ConsoleHandler.Create();
+begin
+ inherited Create;
+end;
+
+destructor ConsoleHandler.Destroy();
+begin
+ inherited Destroy;
+end;
+
+function ConsoleHandler.Open(Identifier: UTF8String) : boolean;
+begin
+ LogIdentifier := Identifier;
+end;
+
+function ConsoleHandler.Close(): boolean;
+begin
+ Result := True;
+end;
+
+function ConsoleHandler.Write(const LogData: UTF8String): boolean;
+var
+ LogMessage : UTF8String;
+begin
+ LogMessage := Format('%S[%D] %S', [LogIdentifier, GetProcessId(), LogData]);
+ Writeln(LogMessage);
+ Result := True;
+end;
+
+end.
diff --git a/Logger.NullHandler.pp b/Logger.NullHandler.pp
new file mode 100644
index 0000000..fe612b9
--- /dev/null
+++ b/Logger.NullHandler.pp
@@ -0,0 +1,84 @@
+{*******************************************************}
+
+{ Renegade BBS }
+
+{ Copyright (c) 1990-2013 The Renegade Dev Team }
+{ Copyleft (ↄ) 2016-2017 Renegade BBS }
+
+{ This file is part of Renegade BBS }
+
+{ Renegade is free software: you can redistribute it }
+{ and/or modify it under the terms of the GNU General }
+{ Public License as published by the Free Software }
+{ Foundation, either version 3 of the License, or }
+{ (at your option) any later version. }
+
+{ Renegade 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. See the GNU General Public }
+{ License for more details. }
+
+{ You should have received a copy of the GNU General }
+{ Public License along with Renegade. If not, see }
+{ . }
+
+{*******************************************************}
+{ _______ __ }
+{ | _ .-----.-----.-----.-----.---.-.--| .-----. }
+{ |. l | -__| | -__| _ | _ | _ | -__| }
+{ |. _ |_____|__|__|_____|___ |___._|_____|_____| }
+{ |: | | |_____| }
+{ |::.|:. | }
+{ `--- ---' }
+{*******************************************************}
+{$mode objfpc}
+{$codepage utf8}
+{$h+}
+unit Logger.NullHandler;
+
+interface
+
+uses
+ Classes,
+ SysUtils,
+ Logger.HandlerInterface;
+
+type
+ NullHandler = class(TObject, LoggingHandlerInterface)
+ Public
+ constructor Create();
+ destructor Destroy();
+ function Open(Identifier: UTF8String): boolean;
+ function Close(): boolean;
+ function Write(const LogData: UTF8String): boolean;
+ end;
+
+implementation
+
+constructor NullHandler.Create();
+begin
+ inherited Create;
+end;
+
+destructor NullHandler.Destroy();
+begin
+ inherited Destroy;
+end;
+
+function NullHandler.Open(Identifier: UTF8String) : boolean;
+begin
+ Result := True;
+end;
+
+function NullHandler.Close(): boolean;
+begin
+ Result := True;
+end;
+
+function NullHandler.Write(const LogData: UTF8String): boolean;
+begin
+ Result := True;
+end;
+
+end.
diff --git a/README.md b/README.md
index 02d15d5..87d0b4d 100644
--- a/README.md
+++ b/README.md
@@ -11,7 +11,11 @@ uses
(Logger.HandlerInterface unit)
to create your own. }
Logger.SysLogHandler,
- // or Logger.StreamHandler,
+ // or
+ Logger.StreamHandler,
+ Logger.ConsoleHandler,
+ Logger.FileHandler,
+ Logger.NullHandler,
//... other units;
var
@@ -41,4 +45,4 @@ begin
Log.Free;
LogHandler.Free;
end.
-```
\ No newline at end of file
+```
diff --git a/tests/LoggerTest.pp b/tests/LoggerTest.pp
index b273f46..0ace54e 100644
--- a/tests/LoggerTest.pp
+++ b/tests/LoggerTest.pp
@@ -43,19 +43,25 @@ uses
Renegade.Logger,
Logger.SysLogHandler,
Logger.StreamHandler,
- Logger.FileHandler;
+ Logger.FileHandler,
+ Logger.NullHandler,
+ Logger.ConsoleHandler;
var
StreamLogHandler : StreamHandler;
Log: RTLogger;
LogFileHandler : FileHandler;
MemoryStream : TMemoryStream;
+ NullLogHandler : NullHandler;
+ ConsoleLogHandler : ConsoleHandler;
begin
//MemoryStream := TMemoryStream.Create;
//StreamLogHandler := StreamHandler.Create('test.log');
//StreamLogHandler := StreamHandler.Create(MemoryStream);
- LogFileHandler := FileHandler.Create('test.log');
- Log := RTLogger.Create(LogFileHandler);
+ //LogFileHandler := FileHandler.Create('test.log');
+ //NullLogHandler := NullHandler.Create;
+ ConsoleLogHandler := ConsoleHandler.Create;
+ Log := RTLogger.Create(ConsoleLogHandler);
Log.Info('Testing', ['File', True, 'Error', True, 'Extended', 'Extend']);
Log.Debug('Debugging', []);
Log.Error('Error', []);