slf4p
A simple logging facade with support for LazLogger, Log4D, and other logging frameworks.
slf4p - Simple Logging Facade for Pascal
The Simple Logging Facade for Pascal serves as a simple facade or abstraction for various logging frameworks (e.g. Log4D, LazLogger) allowing the end user to plug in the desired logging framework at build time.
Developed with Dephi 2009 and Lazarus 2.0, tested with DUnit and FPCUnit.
To register a specific logging framework, just add one of the djLogOver... units to the project.
djLogOverNOPLoggerfor logging over NOPLogger (included)djLogOverSimpleLoggerfor logging over SimpleLogger (included)djLogOverLog4Dfor logging over Log4DdjLogOverLazLoggerfor logging over LazLogger
Examples
The examples use the helper unit slf4p, which is located in the src/main folder, and provides the LOGGER method. (New in 1.0.5) Note:
- the unit which specifies (registers) a logger factory must appear in the uses list before unit slf4p.
- when no unit is added, a NOPLogger factory will be used as fallback, and a message indicating the fallback will be printed.
- the last logger factory unit found will be used to create logger instances.
NOPLogger
Since no unit for registering a logger factory is used, a factory for NOP loggers will be registered.
program HelloWorld;
uses
slf4p;
procedure RunDemo;
begin
LOGGER.Debug('Using slf4p %s', [SLF4P_VERSION]);
LOGGER.Info('Hello, World!');
LOGGER.Debug('Hit any key');
ReadLn;
end;
begin
RunDemo;
end.
Program output
SLF4P: Logger factory is not assigned
SLF4P: Defaulting to no-operation (NOP) logger implementation
SimpleLogger
The first unit used, djLogOverSimpleLogger, registers a factory for console loggers.
program HelloWorld;
uses
djLogOverSimpleLogger,
slf4p;
procedure RunDemo;
begin
LOGGER.Debug('Using slf4p %s', [SLF4P_VERSION]);
LOGGER.Info('Hello, World!');
LOGGER.Debug('Hit any key');
ReadLn;
end;
begin
RunDemo;
end.
Program output
[09:58:46.491] DEBUG - Using slf4p 1.0.6
[09:58:46.491] INFO - Hello, World!
[09:58:46.491] DEBUG - Hit any key
Log4D
The first unit used, djLogOverLog4D, registers a logger factory which created Log4D loggers.
program HelloWorld;
uses
djLogOverLog4D, LogConsoleAppender, Log4d,
slf4p;
procedure RunDemo;
var
LogLayout: ILogLayout;
ConsoleAppender: ILogAppender;
begin
LogLayout := TLogPatternLayout.Create(TTCCPattern);
ConsoleAppender := TLogConsoleAppender.Create('console');
ConsoleAppender.Layout := LogLayout;
TLogBasicConfigurator.Configure(ConsoleAppender);
TLogLogger.GetRootLogger.Level := Debug;
WriteLn('Logging with Log4D version ' + Log4DVersion);
LOGGER.Debug('Using slf4p %s', [SLF4P_VERSION]);
LOGGER.Info('Hello, World!');
LOGGER.Debug('Hit any key');
ReadLn;
end;
begin
RunDemo;
end.
Program output
Logging with Log4D version 1.2.12
0 [13620] debug - Using slf4p 1.0.6-SNAPSHOT
0 [13620] info - Hello, World!
0 [13620] debug - Hit any key
LazLogger
The first unit used, djLogOverLazLogger, registers a logger factory which created LazLogger loggers.
program HelloWorld;
uses
djLogOverLazLogger,
slf4p;
procedure RunDemo;
begin
LOGGER.Debug('Using slf4p %s', [SLF4P_VERSION]);
LOGGER.Info('Hello, World!');
LOGGER.Debug('Hit any key');
ReadLn;
end;
begin
RunDemo;
end.
Program output
3 DEBUG - Using slf4p 1.0.6
3 INFO - Hello, World!
3 DEBUG - Hit any key