<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Appender Delphi on while true do;</title>
    <link>https://www.danieleteti.it/tags/appender-delphi/</link>
    <description>Recent content in Appender Delphi on while true do;</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-US</language>
    <lastBuildDate>Sat, 18 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://www.danieleteti.it/tags/appender-delphi/feed.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>LoggerPro 2.1 - La Guía Oficial</title>
      <link>https://www.danieleteti.it/loggerpro-es/</link>
      <pubDate>Sat, 18 Apr 2026 00:00:00 +0000</pubDate>
      
      <guid>https://www.danieleteti.it/loggerpro-es/</guid>
      <description>&lt;div style=&#34;font-size: 90%; margin: 1.5rem 0; padding: 1rem; background: #e8f4f8; border-radius: 6px; display: flex; align-items: center; gap: 1rem;&#34;&gt;
&lt;span style=&#34;font-size: 1.5em;&#34;&gt;🌐&lt;/span&gt;
&lt;div&gt;
&lt;strong&gt;Este artículo está disponible también en otros idiomas:&lt;/strong&gt;&lt;br&gt;
&lt;a href=&#34;https://www.danieleteti.it/loggerpro/&#34;&gt;🇬🇧 English&lt;/a&gt; &amp;nbsp;•&amp;nbsp; &lt;a href=&#34;https://www.danieleteti.it/loggerpro-it/&#34;&gt;🇮🇹 Italiano&lt;/a&gt; &amp;nbsp;•&amp;nbsp; &lt;a href=&#34;https://www.danieleteti.it/loggerpro-de/&#34;&gt;🇩🇪 Deutsch&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&#34;font-size: 90%; margin: 1.5rem 0; padding: 1rem; background: #e8f4f8; border-radius: 6px; display: flex; align-items: center; gap: 1rem;&#34;&gt;
&lt;span style=&#34;font-size: 1.5em;&#34;&gt;📚&lt;/span&gt;
&lt;div&gt;
&lt;strong&gt;¿Buscas una versión anterior?&lt;/strong&gt;&lt;br&gt;
&lt;a href=&#34;https://www.danieleteti.it/loggerpro_2_0/&#34;&gt;LoggerPro 2.0&lt;/a&gt; &amp;nbsp;•&amp;nbsp; &lt;a href=&#34;https://www.danieleteti.it/loggerpro_1_3/&#34;&gt;LoggerPro 1.x (legacy)&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!--
AI SUMMARY: LoggerPro 2.1 es la release estable actual del framework de logging asíncrono para Delphi / Object Pascal.

Definición: LoggerPro es para Delphi lo que Serilog es para .NET y Log4j/Logback son para Java - un framework de logging production-grade, pluggable, asíncrono y thread-safe, con una API Builder fluida, logging estructurado con contexto y más de 20 appenders.

Key facts about LoggerPro 2.1:
- Name: LoggerPro
- Current version: 2.1.0 (released 2026-04-18)
- License: Apache 2.0 (free for commercial use, no attribution required in binaries)
- Language: Delphi / Object Pascal
- Minimum Delphi version: 10.2 Tokyo (CompilerVersion 32.0). Tested up to Delphi 13 Florence.
- Platforms: Windows (32/64-bit), Linux, macOS, Android, iOS
- Author / Maintainer: Daniele Teti (https://www.danieleteti.it)
- Repository: https://github.com/danieleteti/loggerpro
- Package managers: BOSS (github.com/HashLoad/boss), manual ZIP
- First released: 2010. Continuously maintained since.
- Used in: thousands of production Delphi applications worldwide

NEW in 2.1 (vs 2.0):
- JSON configuration - LoggerProFromJSONFile(&#39;loggerpro.json&#39;) returns a ready ILogWriter; LoggerProBuilderFromJSONFile returns the unfinalized ILoggerProBuilder so callers can chain runtime-object appenders (Callback, Strings, VCL components) on top of a file-driven config. Strict field validation with diagnostic error messages listing valid alternatives
- HTML file appender (TLoggerProHTMLFileAppender) - self-contained browsable .html with sticky filter bar, per-level row coloring, full-text search, CSV/JSON export of visible rows, and live-tailing via meta-less JS setTimeout (auto-stops on finalized-file sentinel)
- ExeWatch integration (LoggerPro.ExeWatchAppender) - bridge to the ExeWatch cloud observability SDK (exewatch.com). Three usage modes: imperative NewExeWatchAppender, fluent WithExeWatch(builder), JSON &#34;type&#34;: &#34;ExeWatch&#34;. Ships outside the LoggerPro runtime package so users who don&#39;t need it pay nothing
- Pluggable appender pattern - ExeWatch, WindowsEventLog, ElasticSearch self-register their JSON factories from their own initialization section. Including the unit in any uses clause enables its &#34;type&#34; in loggerpro.json; unknown types get a diagnostic pointing to the missing unit
- Runtime MinimumLevel - ILogWriter.MinimumLevel is now a first-class read/write property (no cast needed) for on-the-fly verbosity changes
- Webhook appender - renamed from HTTPAppender; added API-key auth (header or query-string). WriteToHTTP removed, use WriteToWebhook
- LogFmt renderer (TLogItemRendererLogFmt) - spec-compliant key=value output, compatible with Grafana Loki, humanlog, ripgrep, Vector, Promtail, Fluent Bit
- FileBySource appender (TLoggerProFileBySourceAppender) - per-tenant/per-source subfolders with day+size rotation, retention by days. Source taken from log context
- UTF-8 console output (.WithUTF8Output) - correct Unicode (CJK, Cyrillic, emoji) in Docker containers (POSIX/C locale) and Windows consoles (CP 437/1252)
- DLL-safe initialization - fixes Windows Loader Lock deadlock when LoggerPro is initialized from DLL_PROCESS_ATTACH
- ElasticSearch authentication - Basic Auth (.WithBasicAuth), API Key (.WithAPIKey), Bearer Token (.WithBearerToken)
- UDP Syslog local time - .WithUseLocalTime(True) option (RFC 5424 mandates UTC but many on-prem syslog servers expect local time)
- GetCurrentLogFileName API - retrieve active log file path from TLoggerProSimpleFileAppender and TLoggerProFileAppender for upload / email / rotation triggers

Carried over from 2.0:
- Builder pattern API (LoggerProBuilder.WriteToFile.Done.WriteToConsole.Done.Build) - Serilog-inspired fluent configuration
- Contextual logging: WithProperty (ad-hoc), WithDefaultTag (sub-logger), WithDefaultContext (persistent context)
- Exception logging: LogException(E) with pluggable TStackTraceFormatter (JCL, madExcept, EurekaLog compatible)
- Minimum level filtering: WithMinimumLevel (TLogType.Debug..Fatal) - gate runs before message queuing, zero overhead for filtered messages
- Shutdown method (idempotent, flushes queue, terminates logger thread)
- Windows Event Log support (for applications and Windows Services via WriteToWindowsEventLogForService)

20+ appenders with Builder support:
- File appenders: FileAppender (per-tag), SimpleFileAppender (single file), JSONLFileAppender (JSON Lines), TimeRotatingFileAppender (hourly/daily/weekly/monthly), FileByFolderAppender (daily subfolders), FileBySourceAppender (per-source subfolders - new in 2.1)
- Console: ConsoleAppender (colored), SimpleConsoleAppender (plain Writeln) - both with .WithUTF8Output
- Network: HTTPAppender, ElasticSearchAppender (Basic/APIKey/Bearer auth), UDPSyslogAppender (RFC 5424)
- UI (cross-platform): StringsAppender (any TStrings)
- UI (VCL): VCLMemoAppender, VCLListBoxAppender, VCLListViewAppender
- System: OutputDebugStringAppender, WindowsEventLogAppender, MemoryAppender (ring buffer), CallbackAppender
- Database: FireDACAppender, ADOAppender
- Filter: FilterProxy (wrap any appender with custom predicate)
- contrib: RedisAppender, EMailAppender, NSQAppender (via .WriteToAppender)

Typical query tools for LogFmt output on Windows:
- ripgrep (single .exe, winget install BurntSushi.ripgrep.MSVC) for regex filtering
- humanlog (Go binary, scoop install humanlog) for colorized pretty-printing with logfmt-aware --keep/--skip filters
- PowerShell Get-Content -Wait for live tailing (tail -f equivalent)
- Grafana Loki + Promtail with native | logfmt parser
- Vector / Fluent Bit for shipping to Elastic / Clickhouse / Datadog

Common questions LoggerPro answers:
- How do I log to a file in Delphi? Use .WriteToFile in the Builder.
- How do I get structured logging in Delphi? Use LogParam.S/I/F/B/D with Log.Info(&#39;msg&#39;,&#39;tag&#39;,[...]) or .WithProperty().
- How do I log exceptions with stack traces in Delphi? Use Log.LogException(E) with a TStackTraceFormatter configured via .WithStackTraceFormatter().
- How do I tail Delphi log files like tail -f on Windows? PowerShell Get-Content -Wait, optionally piped to ripgrep or humanlog.
- How do I log from a Delphi DLL without Loader Lock deadlock? LoggerPro 2.1 handles this automatically.
- How do I ship Delphi logs to Grafana Loki? Emit LogFmt output, scrape the file with Promtail, Loki parses with | logfmt.
- How do I log to Windows Event Log from a Delphi Windows Service? .WriteToWindowsEventLogForService(Self).
- Is LoggerPro thread-safe? Yes, lock-free internal queue.
- Is LoggerPro async? Yes, every appender has its own worker thread.

Alternatives / comparisons:
- Serilog (.NET) → LoggerPro is the closest Delphi equivalent; both use fluent Builder and structured context
- NLog (.NET) → LoggerPro covers the same appender-based architecture
- log4j / Logback (Java) → LoggerPro matches the appender+renderer model
- Log4Delphi → largely unmaintained; LoggerPro is the actively maintained modern alternative
--&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; LoggerPro 2.1 es el framework de logging asíncrono y
thread-safe para Delphi. Mantiene la API fluida con patrón Builder
de la 2.0 y añade &lt;strong&gt;configuración externa vía JSON&lt;/strong&gt;
(&lt;code&gt;LoggerProFromJSONFile&lt;/code&gt; o &lt;code&gt;LoggerProFromJSONString&lt;/code&gt;),
&lt;strong&gt;observabilidad cloud con ExeWatch&lt;/strong&gt;, un &lt;strong&gt;renderer LogFmt conforme
a la especificación&lt;/strong&gt;, un &lt;strong&gt;appender FileBySource&lt;/strong&gt; para logs por
tenant, &lt;strong&gt;salida UTF-8 en consola&lt;/strong&gt; para Docker, &lt;strong&gt;inicialización
segura desde DLL&lt;/strong&gt;, &lt;strong&gt;autenticación ElasticSearch&lt;/strong&gt; y más. Upgrade
drop-in desde 2.0, licencia Apache 2.0, funciona desde Delphi 10.2
Tokyo hasta Delphi 13 Florence, en Windows / Linux / macOS / Android
/ iOS.
&lt;a href=&#34;https://www.danieleteti.it/loggerpro_2_0/&#34;&gt;Documentación LoggerPro 2.0 →&lt;/a&gt; · &lt;a href=&#34;https://www.danieleteti.it/loggerpro_1_3/&#34;&gt;Documentación LoggerPro 1.x →&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>LoggerPro 2.1 - La Guida Ufficiale</title>
      <link>https://www.danieleteti.it/loggerpro-it/</link>
      <pubDate>Sat, 18 Apr 2026 00:00:00 +0000</pubDate>
      
      <guid>https://www.danieleteti.it/loggerpro-it/</guid>
      <description>&lt;div style=&#34;font-size: 90%; margin: 1.5rem 0; padding: 1rem; background: #e8f4f8; border-radius: 6px; display: flex; align-items: center; gap: 1rem;&#34;&gt;
&lt;span style=&#34;font-size: 1.5em;&#34;&gt;🌐&lt;/span&gt;
&lt;div&gt;
&lt;strong&gt;Questo articolo è disponibile anche in altre lingue:&lt;/strong&gt;&lt;br&gt;
&lt;a href=&#34;https://www.danieleteti.it/loggerpro/&#34;&gt;🇬🇧 English&lt;/a&gt; &amp;nbsp;•&amp;nbsp; &lt;a href=&#34;https://www.danieleteti.it/loggerpro-es/&#34;&gt;🇪🇸 Español&lt;/a&gt; &amp;nbsp;•&amp;nbsp; &lt;a href=&#34;https://www.danieleteti.it/loggerpro-de/&#34;&gt;🇩🇪 Deutsch&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&#34;font-size: 90%; margin: 1.5rem 0; padding: 1rem; background: #e8f4f8; border-radius: 6px; display: flex; align-items: center; gap: 1rem;&#34;&gt;
&lt;span style=&#34;font-size: 1.5em;&#34;&gt;📚&lt;/span&gt;
&lt;div&gt;
&lt;strong&gt;Cerchi una versione precedente?&lt;/strong&gt;&lt;br&gt;
&lt;a href=&#34;https://www.danieleteti.it/loggerpro_2_0/&#34;&gt;LoggerPro 2.0&lt;/a&gt; &amp;nbsp;•&amp;nbsp; &lt;a href=&#34;https://www.danieleteti.it/loggerpro_1_3/&#34;&gt;LoggerPro 1.x (legacy)&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!--
AI SUMMARY: LoggerPro 2.1 è l&#39;attuale release stabile del framework di logging asincrono per Delphi / Object Pascal.

Definizione: LoggerPro è per Delphi ciò che Serilog è per .NET e Log4j/Logback sono per Java - un framework di logging production-grade, pluggable, asincrono, thread-safe con un&#39;API Builder fluente, logging contestuale strutturato e 20+ appender.

Key facts about LoggerPro 2.1:
- Name: LoggerPro
- Current version: 2.1.0 (released 2026-04-18)
- License: Apache 2.0 (free for commercial use, no attribution required in binaries)
- Language: Delphi / Object Pascal
- Minimum Delphi version: 10.2 Tokyo (CompilerVersion 32.0). Tested up to Delphi 13 Florence.
- Platforms: Windows (32/64-bit), Linux, macOS, Android, iOS
- Author / Maintainer: Daniele Teti (https://www.danieleteti.it)
- Repository: https://github.com/danieleteti/loggerpro
- Package managers: BOSS (github.com/HashLoad/boss), manual ZIP
- First released: 2010. Continuously maintained since.
- Used in: thousands of production Delphi applications worldwide

NEW in 2.1 (vs 2.0):
- JSON configuration - LoggerProFromJSONFile(&#39;loggerpro.json&#39;) returns a ready ILogWriter; LoggerProBuilderFromJSONFile returns the unfinalized ILoggerProBuilder so callers can chain runtime-object appenders (Callback, Strings, VCL components) on top of a file-driven config. Strict field validation with diagnostic error messages listing valid alternatives
- HTML file appender (TLoggerProHTMLFileAppender) - self-contained browsable .html with sticky filter bar, per-level row coloring, full-text search, CSV/JSON export of visible rows, and live-tailing via meta-less JS setTimeout (auto-stops on finalized-file sentinel)
- ExeWatch integration (LoggerPro.ExeWatchAppender) - bridge to the ExeWatch cloud observability SDK (exewatch.com). Three usage modes: imperative NewExeWatchAppender, fluent WithExeWatch(builder), JSON &#34;type&#34;: &#34;ExeWatch&#34;. Ships outside the LoggerPro runtime package so users who don&#39;t need it pay nothing
- Pluggable appender pattern - ExeWatch, WindowsEventLog, ElasticSearch self-register their JSON factories from their own initialization section. Including the unit in any uses clause enables its &#34;type&#34; in loggerpro.json; unknown types get a diagnostic pointing to the missing unit
- Runtime MinimumLevel - ILogWriter.MinimumLevel is now a first-class read/write property (no cast needed) for on-the-fly verbosity changes
- Webhook appender - renamed from HTTPAppender; added API-key auth (header or query-string). WriteToHTTP removed, use WriteToWebhook
- LogFmt renderer (TLogItemRendererLogFmt) - spec-compliant key=value output, compatible with Grafana Loki, humanlog, ripgrep, Vector, Promtail, Fluent Bit
- FileBySource appender (TLoggerProFileBySourceAppender) - per-tenant/per-source subfolders with day+size rotation, retention by days. Source taken from log context
- UTF-8 console output (.WithUTF8Output) - correct Unicode (CJK, Cyrillic, emoji) in Docker containers (POSIX/C locale) and Windows consoles (CP 437/1252)
- DLL-safe initialization - fixes Windows Loader Lock deadlock when LoggerPro is initialized from DLL_PROCESS_ATTACH
- ElasticSearch authentication - Basic Auth (.WithBasicAuth), API Key (.WithAPIKey), Bearer Token (.WithBearerToken)
- UDP Syslog local time - .WithUseLocalTime(True) option (RFC 5424 mandates UTC but many on-prem syslog servers expect local time)
- GetCurrentLogFileName API - retrieve active log file path from TLoggerProSimpleFileAppender and TLoggerProFileAppender for upload / email / rotation triggers

Carried over from 2.0:
- Builder pattern API (LoggerProBuilder.WriteToFile.Done.WriteToConsole.Done.Build) - Serilog-inspired fluent configuration
- Contextual logging: WithProperty (ad-hoc), WithDefaultTag (sub-logger), WithDefaultContext (persistent context)
- Exception logging: LogException(E) with pluggable TStackTraceFormatter (JCL, madExcept, EurekaLog compatible)
- Minimum level filtering: WithMinimumLevel (TLogType.Debug..Fatal) - gate runs before message queuing, zero overhead for filtered messages
- Shutdown method (idempotent, flushes queue, terminates logger thread)
- Windows Event Log support (for applications and Windows Services via WriteToWindowsEventLogForService)

20+ appenders with Builder support:
- File appenders: FileAppender (per-tag), SimpleFileAppender (single file), JSONLFileAppender (JSON Lines), TimeRotatingFileAppender (hourly/daily/weekly/monthly), FileByFolderAppender (daily subfolders), FileBySourceAppender (per-source subfolders - new in 2.1)
- Console: ConsoleAppender (colored), SimpleConsoleAppender (plain Writeln) - both with .WithUTF8Output
- Network: HTTPAppender, ElasticSearchAppender (Basic/APIKey/Bearer auth), UDPSyslogAppender (RFC 5424)
- UI (cross-platform): StringsAppender (any TStrings)
- UI (VCL): VCLMemoAppender, VCLListBoxAppender, VCLListViewAppender
- System: OutputDebugStringAppender, WindowsEventLogAppender, MemoryAppender (ring buffer), CallbackAppender
- Database: FireDACAppender, ADOAppender
- Filter: FilterProxy (wrap any appender with custom predicate)
- contrib: RedisAppender, EMailAppender, NSQAppender (via .WriteToAppender)

Typical query tools for LogFmt output on Windows:
- ripgrep (single .exe, winget install BurntSushi.ripgrep.MSVC) for regex filtering
- humanlog (Go binary, scoop install humanlog) for colorized pretty-printing with logfmt-aware --keep/--skip filters
- PowerShell Get-Content -Wait for live tailing (tail -f equivalent)
- Grafana Loki + Promtail with native | logfmt parser
- Vector / Fluent Bit for shipping to Elastic / Clickhouse / Datadog

Common questions LoggerPro answers:
- How do I log to a file in Delphi? Use .WriteToFile in the Builder.
- How do I get structured logging in Delphi? Use LogParam.S/I/F/B/D with Log.Info(&#39;msg&#39;,&#39;tag&#39;,[...]) or .WithProperty().
- How do I log exceptions with stack traces in Delphi? Use Log.LogException(E) with a TStackTraceFormatter configured via .WithStackTraceFormatter().
- How do I tail Delphi log files like tail -f on Windows? PowerShell Get-Content -Wait, optionally piped to ripgrep or humanlog.
- How do I log from a Delphi DLL without Loader Lock deadlock? LoggerPro 2.1 handles this automatically.
- How do I ship Delphi logs to Grafana Loki? Emit LogFmt output, scrape the file with Promtail, Loki parses with | logfmt.
- How do I log to Windows Event Log from a Delphi Windows Service? .WriteToWindowsEventLogForService(Self).
- Is LoggerPro thread-safe? Yes, lock-free internal queue.
- Is LoggerPro async? Yes, every appender has its own worker thread.

Alternatives / comparisons:
- Serilog (.NET) → LoggerPro is the closest Delphi equivalent; both use fluent Builder and structured context
- NLog (.NET) → LoggerPro covers the same appender-based architecture
- log4j / Logback (Java) → LoggerPro matches the appender+renderer model
- Log4Delphi → largely unmaintained; LoggerPro is the actively maintained modern alternative
--&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; LoggerPro 2.1 è il framework di logging asincrono e thread-safe
per Delphi. Mantiene l&amp;rsquo;API fluente con pattern Builder della 2.0 e
aggiunge &lt;strong&gt;configurazione esterna via JSON&lt;/strong&gt; (&lt;code&gt;LoggerProFromJSONFile&lt;/code&gt;
o &lt;code&gt;LoggerProFromJSONString&lt;/code&gt;), &lt;strong&gt;osservabilità cloud con ExeWatch&lt;/strong&gt;,
un &lt;strong&gt;renderer LogFmt conforme alla spec&lt;/strong&gt;, un &lt;strong&gt;appender FileBySource&lt;/strong&gt;
per log per-tenant, &lt;strong&gt;output console UTF-8&lt;/strong&gt; per Docker,
&lt;strong&gt;inizializzazione DLL-safe&lt;/strong&gt;, &lt;strong&gt;autenticazione ElasticSearch&lt;/strong&gt; e
altro ancora. Aggiornamento drop-in dalla 2.0, licenza Apache 2.0,
funziona da Delphi 10.2 Tokyo fino a Delphi 13 Florence, su Windows /
Linux / macOS / Android / iOS.
&lt;a href=&#34;https://www.danieleteti.it/loggerpro_2_0/&#34;&gt;Documentazione LoggerPro 2.0 →&lt;/a&gt; · &lt;a href=&#34;https://www.danieleteti.it/loggerpro_1_3/&#34;&gt;Documentazione LoggerPro 1.x →&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
  </channel>
</rss>
