An modern and pluggable logging framework for Delphi
Switch branches/tags
Clone or download
danieleteti New RESTAppender, MobileSample, Android support for TLoggerProFileApp…
…ender, OnLogRow event in TLoggerProFileAppender
Latest commit 23f53e6 Sep 18, 2018
Permalink
Failed to load latest commit information.
docs VERSION 1.0 Sep 6, 2016
samples New RESTAppender, MobileSample, Android support for TLoggerProFileApp… Sep 18, 2018
unittests Added proxy interface for ILogAppender Aug 17, 2018
.gitignore Samples cleaning for DAPUG 2017 Oct 22, 2017
Delphinus.Info.json Delphinus support / fixed headers styling in README.md Jun 21, 2017
Delphinus.Install.json Delphinus support / fixed headers styling in README.md Jun 21, 2017
LICENSE Initial commit Mar 25, 2016
LOGGERPRO-BUILD-TIMESTAMP.TXT New RESTAppender, MobileSample, Android support for TLoggerProFileApp… Sep 18, 2018
LoggerPro.ConsoleAppender.pas Removed TThreadedQueue<T> and replaced with TThreadSafeQueue<T> Aug 10, 2018
LoggerPro.EMailAppender.pas emailappender first version Dec 6, 2016
LoggerPro.FileAppender.pas New RESTAppender, MobileSample, Android support for TLoggerProFileApp… Sep 18, 2018
LoggerPro.GlobalLogger.pas RC5 Aug 17, 2016
LoggerPro.MemoryAppender.pas version 1.1.2 Jun 13, 2017
LoggerPro.NSQAppender.pas New RESTAppender, MobileSample, Android support for TLoggerProFileApp… Sep 18, 2018
LoggerPro.OutputDebugStringAppender.pas Small fixes on outputdebugstring appender and listview appender May 23, 2018
LoggerPro.Proxy.pas Added proxy interface for ILogAppender Aug 17, 2018
LoggerPro.RESTAppender.pas New RESTAppender, MobileSample, Android support for TLoggerProFileApp… Sep 18, 2018
LoggerPro.RedisAppender.pas Samples refactoring Oct 24, 2017
LoggerPro.UDPSyslogAppender.pas add UTF8 BOM default parameters May 29, 2018
LoggerPro.Utils.pas VERSION 1.1 beta Dec 2, 2016
LoggerPro.VCLListViewAppender.pas Small fixes on outputdebugstring appender and listview appender May 23, 2018
LoggerPro.VCLMemoAppender.pas Removed TThreadedQueue<T> and replaced with TThreadSafeQueue<T> Aug 10, 2018
LoggerPro.pas New RESTAppender, MobileSample, Android support for TLoggerProFileApp… Sep 18, 2018
README.md New RESTAppender, MobileSample, Android support for TLoggerProFileApp… Sep 18, 2018
ThreadSafeQueueU.pas Small fix for Enqueue Aug 17, 2018
VERSION.TXT New RESTAppender, MobileSample, Android support for TLoggerProFileApp… Sep 18, 2018
clean.bat Some changes after the merge from 'he3p94uu'. May 23, 2018
dodo.py New RESTAppender, MobileSample, Android support for TLoggerProFileApp… Sep 18, 2018
loggerpro_logo.png FIX in appenders' state machine Jun 1, 2017
pasdoc.pds VERSION 1.0 Sep 6, 2016

README.md

LoggerPro for Delphi

An modern and pluggable logging framework for Delphi

Compatibility

LoggerPro is compatibile with

  • Delphi XE2
  • Delphi XE3
  • Delphi XE4
  • Delphi XE5
  • Delphi XE6
  • Delphi XE7
  • Delphi XE8
  • Delphi 10 Seattle
  • Delphi 10.1 Berlin
  • Delphi 10.2 Tokyo (Linux compatibility)

What's new in 1.3.0

  • Replace TThreadedList<T> a custom implementation (TThreadSafeQueue<T>) because of a bug and this in TMonitor.
    • ``TThreadSafeQueueis not a drop-in replacement for theTThreadedQueue` but can be used in other projects if you are fighting with the same bug.
  • TVCLMemoLogAppender.Create gots new parameter: aClearOnStartup which optionally clear the memo at the startup.
  • Improvement to the TLoggerProConsoleAppender (Thanks to Fulgan)
  • Improvement to the TLoggerProFileAppender; now there is a OnLogRow callback that can be used to customize log row format.
  • New overloaded Log methods. The *Fmt versions are deprecated and will be removed in a future version ISSUE #17
  • New NSQ appender (Thanks to Fulgan)
  • New logger filter decorator (Thanks to Fulgan)
  • New REST appender with support for extended information (samples for Windows and Android)
    • Extended information are supported in Windows (fully) and Android (partially)
    • In the sample folder is provided also the RESTLogCollector

Getting started

program getting_started_console;

{$APPTYPE CONSOLE}

uses
  System.SysUtils,
  LoggerPro.GlobalLogger; //this is the global logger, it is perfect to understand the basic operation of LoggerPro.

begin
  try
    //the global logger uses a TLoggerProFileAppender, so your logs will be written on a 
    //set of files with automatic rolling/rotating
    
    Log.Debug('Debug message', 'main'); //TLoggerProFileAppender uses the "tag" to select a different log file	
    Log.Info('Info message', 'main');
    Log.Warn('Warning message', 'main');
    Log.Error('Error message', 'errors');
    WriteLn('Check "getting_started_console.00.main.log" and "getting_started_console.00.errors.log" to see your logs');
    ReadLn;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;

end.

The most flexible/correct approach is not much complicated than the global logger one. Check how is simple to create a custom instance of logwriter

program getting_started_console_appenders;

{$APPTYPE CONSOLE}

uses
  System.SysUtils,
  LoggerPro, //LoggerPro core
  LoggerPro.FileAppender, //File appender
  LoggerPro.OutputDebugStringAppender; //OutputDebugString appender

var
  Log: ILogWriter;

begin
  Log := BuildLogWriter([TLoggerProFileAppender.Create,
    TLoggerProOutputDebugStringAppender.Create]);

  try
    Log.Debug('Debug message', 'main');
    Log.Info('Info message', 'main');
    Log.Warn('Warning message', 'main');
    Log.Error('Error message', 'errors');
    WriteLn('Check ');
    WriteLn('  "getting_started_console.00.main.log"');
    WriteLn('  "getting_started_console.00.errors.log"');

    if DebugHook <> 0 then //inform the user where his/her logs are
    begin
      WriteLn('also, you logs have been sent to the current debugger, check the Delphi''s EventLog window to see them.');
    end
    else
    begin
      WriteLn('..seems that no debugger is present. The logs can be seen using DebugView.');
      WriteLn('Download it from here https://technet.microsoft.com/en-us/sysinternals/debugview.aspx');
      WriteLn('Learn how to use http://tedgustaf.com/blog/2011/5/use-debugview-to-view-debug-output-from-asp-net-web-application/');
    end;
    ReadLn;
  except
    on E: Exception do
      WriteLn(E.ClassName, ': ', E.Message);
  end;

end.

Built-in log appenders

The framework contains the following built-in log appenders

  • File appender (TLoggerProFileAppender) (v1.0.0+)
  • Console appender (TLoggerProConsoleAppender) (v1.0.0+)
  • OutputDebugString appender (TLoggerProOutputDebugStringAppender) (v1.0.0+)
  • VCL Memo appender (TVCLMemoLogAppender) (v1.0.0+)
  • VCL ListView appender (TVCLMemoLogAppender) -- thanks to https://github.com/he3p94uu (v1.3.0+)
  • Redis Appender with LogsViewer(to aggregate logs from different instances on a single Redis instance) (v1.2.0+)
  • Email appender (to send email as log, very useful for fatal errors) (v1.2.0+)
  • SysLog appender RFC 5424 compliant -- thanks to https://github.com/nurettin (v1.3.0+)
  • NSQ appender (Thanks to Fulgan) (v1.3.0+)
  • Decorator appender (Thanks to Fulgan) (v1.3.0+)

Next appenders in the development pipeline

  • RESTful Appender (to send logs to a rest endpoint using a specific request format, so that you can implement log server in DelphiMVCFramework, PHP, Java, Python, Node etc)
  • Twitter Appender (to send logs to a Twitter Account)
  • Database appender (to send logs to a database table using FireDAC components -- Thank You Omar Bossoni)

The log writers and all the appenders are asycnhronous.

Check the samples to see how to use each appender or even combine different appenders.

Documentation

Documentation is available in the docs folder as HTML.

Other

You can install Delphinus package manager and install LoggerPro as a package there. (Delphinus-Support)