
| Brazilian Portuguese | English |
Datalogger is designed to be a simple log library supported by multiple provides .
Support: [email protected]
$ boss install github.com/dliocode/dataloggerAdd the following folders to your project, in Project> Options> Delphi Compiler> Search Path
../src/Core
../src/Providers
There are two different ways to use Datalogger: directly by Logger or instantiating your own TDataLogger .
Samples
The first is only intended to be a convenient shared log to use throughout your app if you choose.
uses DataLogger;
A provider serves essentially to store its logs. Each instance of a TDatalogger can have several configured provides .
Here we have a list of 60 provides available:
| Name | Uses | Examples |
|---|---|---|
| AWS Cloudwatch | Datalogger.provider.aws.cloudwatch | AWS Cloudwatch |
| Axiom | Datalogger.provider.Axiom | Axiom |
| Callmebot | Datalogger.provider.callmebot.whatsapp | Callmebot |
| Console | Datalogger.provider.console | Console Simple console |
| Coalogix | Datalogger.provider.cralogix | Coalogix |
| CSV | Datalogger.provider.csv | CSV |
| Datadatog | Datalogger.provider.dateg | Datadatog |
| Datalust | Datalogger.provider.datalust | Datalust |
| Discord | Datalogger.provider.discord.webhook | Discordhook |
| Dynatrace | Date logger.provider.dynatrace | Dynatrace |
| Elasticsearch | Datalogger.provider.elasticsearch | Elasticsearch |
| Teach Him | Datalogger.provider.elmah | Teach Him |
| Datalogger.provider.email | ||
| EVENT LOG | Datalogger.provider.eventlog | Eventlog |
| Events | Datalogger.provider.events | Events Events - with DataSet Events - with sqlite |
| Firebase | Date logger.provider.firebase.realtime database | Firebase |
| Gap | Datalogger.provider.grafana.loki Datalogger.provider.grafana.oncall.webhook | Gap |
| Graphjson | Datalogger.provider.graphjson | Graphjson |
| Graylog | Datalogger.provider.graylog | Graylog |
| Html | Datalogger.provider.html | Html |
| Listbox | Datalogger.provider.listbox | Listbox |
| ListView | Datalogger.provider.listview | ListView |
| Logentries | Datalogger.provider.Logentries | Logentries |
| Logflare | Datalogger.provider.logflare | Logflare |
| Loggly | Datalogger.provider.loggly | Loggly |
| Logstash | Datalogger.provider.logstash | Logstash |
| Logthal | Datalogger.provider.logtail | Logthal |
| Logz | Datalogger.provider.logz | Logz |
| Mailgun | Datalogger.provider.mailgun.api | Mailgun |
| Mailjet | Datalogger.provider.mailjet.api | Mailjet |
| Mattemost | Datalogger.provider.mattemet Datalogger.provider.mattemost.webhooks | Mattemost Mattemosthook |
| Memo | Datalogger.provider.memo | Memo Memo and Text File Memo - Only Error/VCL |
| Memory | Datalogger.provider.memory | Memory |
| Mezma | Datalogger.provider.mezmo | Mezma |
| Mongodb | Datalogger.provider.mongodb.cloud | Mongodb |
| Ntfy | Datalogger.provider.ntfy | Ntfy |
| Newrelic | Datalogger.provider.newrelic | Newrelic |
| Notification | Datalogger.provider.notification | Notification |
| New | Datalogger.provider.novu | New |
| Outputdebugstring | Datalogger.provider.outputdebugstring | Outputdebugstring |
| Papertrail | Datalogger.provider.papertrail | Papertrail |
| Postmark | Datalogger.provider.postmark.api | Postmark |
| Rabbitmq | Datalogger.provider.rabbitmq | Rabbitmq |
| Redis | Datalogger.provider.redis | Redis |
| Rest | Datalogger.provider.rest.httpclient Datalogger.provider.rest.indy Datalogger.provider.rest.nethttpclient | Rest |
| Richedit | Datalogger.provider.richedit | Richedit |
| Sematext | Datalogger.provider.sematext.logs | Sematext-Logs |
| Sendchamp | Datalogger.provider.sendchamp.sms Datalogger.provider.sendchamp.whatsapp | Sendemail |
| Sendemail | Datalogger.provider.sendemail | Sendemail |
| Sendgrid | Datalogger.provider.sendgrid.webapi | Sendgridwebapi |
| Slack | Datalogger.provider.slack.webapi Datalogger.provider.slack.webhook | Slack |
| Splunk | Datalogger.provider.splunk | Splunk |
| Socket | Datalogger.provider.socket | Socket |
| Sumologic | Datalogger.provider.sumologic | Sumologic |
| Syslog | Datalogger.provider.syslog Datalogger.provider.syslog.indy | Syslog SYSLOG INDY |
| Telegram | Datalogger.provider.telegram | Telegram |
| Textfile | Datalogger.provider.textfile | Textfile |
| Ultramsg | Datalogger.provider.ultramsg.whatsapp | Ultramsg |
| Twilio | Datalogger.provider.twilio.sms Datalogger.provider.twilio.whatsapp | Twilio |
| Z-API | Datalogger.provider.zapi.whatsapp | Z-API |
These dependencies occurs when some provides use
| Provider | Depends |
|---|---|
| Datalogger.provider.rabbitmq | Rabbitmq |
| Datalogger.provider.redis | Redis |
| Datalogger.provider.sendemail | Sendemail |
Access_wifi_state permission is required: Used to capture device Mac Address.
uses
DataLogger,
DataLogger.Provider.Console;
begin
Logger.AddProvider(TProviderConsole.Create);
Logger
.Trace( ' My Trace ' )
.Debug( ' My Debug ' )
.Info( ' My Info ' )
.Warn( ' My Warn ' )
.Error( ' My Error ' )
.Success( ' My Success ' )
.Fatal( ' My Fatal ' )
.Custom( ' Custom Level ' , ' My Custom ' )
;
// or
Logger
.T( ' My Trace ' )
.D( ' My Debug ' )
.I( ' My Info ' )
.W( ' My Warn ' )
.E( ' My Error ' )
.S( ' My Success ' )
.F( ' My Fatal ' )
.C( ' Custom Level ' , ' My Custom ' )
;
Readln;
end . uses
DataLogger,
DataLogger.Provider.Console;
var
LCustomLogger: TDataLogger;
begin
LCustomLogger := TDataLogger.Builder;
LCustomLogger.AddProvider(TProviderConsole.Create);
LCustomLogger
.Trace( ' My Trace ' )
.Debug( ' My Debug ' )
.Info( ' My Info ' )
.Warn( ' My Warn ' )
.Error( ' My Error ' )
.Success( ' My Success ' )
.Fatal( ' My Fatal ' )
.Custom( ' Custom Level ' , ' My message with custom level ' );
Readln;
end . uses
DataLogger,
DataLogger.Simple,
DataLogger.Provider.Console;
begin
// Defini o provider
Logger.AddProvider(TProviderConsole.Create);
// Defini no DataloggerSimple a instância do log a ser utilizado
TDataLoggerSimple.SetDataLogger(Logger);
// Só usar o modo simples;
Trace( ' My message Trace ' );
Debug( ' My message debug ' );
Info( ' My message info ' );
Success( ' My message success ' );
Warn( ' My message warn ' );
Error( ' My message error ' );
Fatal( ' My message fatal ' );
Custom( ' My Type ' , ' My message custom ' );
Readln;
end .
Custom is the way to define a name for your own level .
uses
DataLogger,
DataLogger.Provider.Console;
begin
Logger.AddProvider(TProviderConsole.Create);
Logger.SetTemplate( ' ${timestamp} [${level}] ${message} ' );
Logger.Custom( ' Custom Level ' , ' My message with custom level! ' );
// Output: 2022-12-01 09:00:05.500 [Custom Level] My message with custom level!
Readln;
end .Functions that operate in some provides.
// Pula uma linha
Logger.SlineBreak;
// Desfaz o último log registrado
Logger.UndoLast; The SlineBreak function using to break the line.
uses
DataLogger,
DataLogger.Provider.Console;
begin
Logger.AddProvider(TProviderConsole.Create);
// Definindo o template
Logger.SetTemplate( ' ${timestamp} [${level}] ${message} ' );
// Gerando os logs
Logger.Info( ' My message with level INFO ' );
Logger.SlineBreak;
Logger.Error( ' My message with level ERROR ' );
// Output: 2022-12-01 09:00:05.500 [INFO] My message with level INFO
// Output:
// Output: 2022-12-01 09:00:05.600 [ERROR] My message with level ERROR
Readln;
end . The UndoLast function using to undo the last record performed.
uses
DataLogger,
DataLogger.Provider.Console;
begin
Logger.AddProvider(TProviderConsole.Create);
// Definindo o template
Logger.SetTemplate( ' ${timestamp} [${level}] ${message} ' );
// Gerando os logs
Logger.Info( ' My message with level INFO ' );
// Output: 2022-12-01 09:00:05.500 [INFO] My message with level INFO
Sleep( 4000 );
Logger.UndoLast;
Logger.Error( ' My message with level ERROR ' );
// Output: 2022-12-01 09:00:05.600 [ERROR] My message with level ERROR
Readln;
end .The template is the format that will be generated the log.
Standard Template:
$ { timestamp } [TID $ { thread_id } ] [PID $ { process_id } ] [SEQ $ { sequence } ] [$ { level } ] [$ { tag } ] $ { message }There are some constants that can be used to facilitate the creation of the template.
// Exibe o id que foi gerado o log, no formato GUID
TLoggerTemplate.LOG_ID = ' ${id} ' ;
// Exibe o nome do log. ex: Logger.SetName('SERVICE_REMOTE')
TLoggerTemplate.LOG_NAME = ' ${name} ' ;
// Exibe a sequencia que o log foi gerado.
TLoggerTemplate.LOG_SEQUENCE = ' ${sequence} ' ;
// Exibe a data e hora que foi gerado, usado o SetFormatTimestamp
TLoggerTemplate.LOG_TIMESTAMP = ' ${timestamp} ' ;
// Exibe a data e hora que foi gerado, no formato ISO8601.
TLoggerTemplate.LOG_TIMESTAMP_ISO8601 = ' ${timestamp_iso8601} ' ;
// Exibe a data e hora que foi gerado, no formato UNIX.
TLoggerTemplate.LOG_TIMESTAMP_UNIX = ' ${timestamp_unix} ' ;
// Exibe o Id da thread que foi gerado o log.
TLoggerTemplate.LOG_THREADID = ' ${thread_id} ' ;
// Exibe o id do processo do app.
TLoggerTemplate.LOG_PROCESSID = ' ${process_id} ' ;
// Exibe o level do log, sendo eles: TRACE / DEBUG / INFO / SUCCESS / WARN / ERROR / FATAL
TLoggerTemplate.LOG_LEVEL = ' ${level} ' ;
// Exibe o level do log no formato numérico, sendo eles: 1=TRACE / 2=DEBUG / 3=INFO / 4=SUCCESS / 5=WARN / 6=ERROR / 7=FATAL / 8=CUSTOM
TLoggerTemplate.LOG_LEVEL_VALUE = ' ${level_value} ' ;
// Exibe a tag do log, essa informação é preenchida a após a mensagem; Ex: Logger.Debug('Minha mensagem','Minha Tag');
TLoggerTemplate.LOG_TAG = ' ${tag} ' ;
// Exibe a mensagem do log, sem essa tag a mensagem não é exibida. Ex: Logger.Debug('Minha mensagem');
TLoggerTemplate.LOG_MESSAGE = ' ${message} ' ; // Exibe o nome do app.
TLoggerTemplate.LOG_APPNAME = ' ${app_name} ' ;
// Exibe o diretório do app.
TLoggerTemplate.LOG_APPPATH = ' ${app_path} ' ;
// Exibe a versão do app.
TLoggerTemplate.LOG_APPVERSION = ' ${app_version} ' ;
// Exibe o tamanho do app em MB.
TLoggerTemplate.LOG_APPSIZE = ' ${app_size} ' ;
// Exibe o nome do computador.
TLoggerTemplate.LOG_COMPUTERNAME = ' ${computer_name} ' ;
// Exibe o nome do usuário do Sistema Operacional.
TLoggerTemplate.LOG_USERNAME = ' ${username} ' ;
// Exibe as informações do Sistema Operacional.
TLoggerTemplate.LOG_OSVERSION = ' ${os_version} ' ;
// Exibe o IP Local.
TLoggerTemplate.LOG_IP_LOCAL = ' ${ip_local} ' ;
// Exibe o MAC Address.
TLoggerTemplate.LOG_MAC_ADDRESS = ' ${mac_address} ' ;
Defines the format that will be recorded the log
uses
DataLogger,
DataLogger.Provider.Console;
begin
Logger.AddProvider(TProviderConsole.Create);
// Definindo o template
Logger.SetTemplate( ' ${timestamp} [${level}] ${message} ' );
// Definindo o template com constante
Logger.SetTemplate(Format( ' %s [%s] %s ' , [TLoggerTemplate.LOG_TIMESTAMP, TLoggerTemplate.LOG_LEVEL, LoggerTemplate.LOG_MESSAGE]));
// Gerando os logs
Logger.Info( ' My message with level INFO ' );
Logger.Error( ' My message with level ERROR ' );
// Output: 2022-12-01 09:00:05.500 [INFO] My message with level INFO
// Output: 2022-12-01 09:00:05.600 [ERROR] My message with level ERROR
Readln;
end . uses
DataLogger,
DataLogger.Provider.Console,
DataLogger.Provider.TextFile;
begin
// Formato do console '${timestamp} [${level}] ${message}'
Logger.AddProvider(
TProviderConsole.Create
.SetTemplate( ' ${timestamp} [${level}] ${message} ' )
);
// Formato do text file '${timestamp} - ${message}'
Logger.AddProvider(
TProviderTextFile.Create
.SetTemplate( ' ${timestamp} - ${message} ' )
);
// Gerando os logs
Logger.Info( ' My message with level INFO ' );
Logger.Error( ' My message with level ERROR ' );
// Output Console:
// 2022-12-01 09:00:05.500 [INFO] My message with level INFO
// 2022-12-01 09:00:05.600 [ERROR] My message with level ERROR
// Output TextFile:
// 2022-12-01 09:00:05.500 - My message with level INFO
// 2022-12-01 09:00:05.600 - My message with level ERROR
Readln;
end .It changes the Timestamp shape.
yyyy-mm-dd hh:mm:ss.zzz uses
DataLogger,
DataLogger.Provider.Console;
begin
Logger.AddProvider(TProviderConsole.Create);
// Definindo o formato do Timestamp
Logger.SetFormatTimestamp( ' dd/mm/yyyy hh:mm:ss ' )
// Definindo o template
Logger.SetTemplate( ' ${timestamp} [${level}] ${message} ' );
// Definindo o template com constante
Logger.SetTemplate(Format( ' %s [%s] %s ' , [TLoggerTemplate.LOG_TIMESTAMP, TLoggerTemplate.LOG_LEVEL, LoggerTemplate.LOG_MESSAGE]));
// Gerando os logs
Logger.Info( ' My message with level INFO ' );
Logger.Error( ' My message with level ERROR ' );
// Output: 01/12/2022 09:00:05 [INFO] My message with level INFO
// Output: 01/12/2022 09:00:05 [ERROR] My message with level ERROR
Readln;
end .Datalogger has these levels to generate the logs :
Logger.Trace( ' ' );
Logger.Debug( ' ' );
Logger.Info( ' ' );
Logger.Success( ' ' );
Logger.Warn( ' ' );
Logger.Error( ' ' );
Logger.Fatal( ' ' );
Logger.Custom( ' ' );
// Modo simplificado
Logger.T( ' ' ); // TRACE
Logger.D( ' ' ); // DEBUG
Logger.I( ' ' ); // INFO
Logger.S( ' ' ); // SUCCESS
Logger.W( ' ' ); // WARN
Logger.E( ' ' ); // ERROR
Logger.F( ' ' ); // FATAL
Logger.C( ' ' ); // CUSTOM It is possible to change the description of the level to another description.
uses
DataLogger,
DataLogger.Provider.Console;
begin
Logger.AddProvider(TProviderConsole.Create);
// Definindo o template
Logger.SetTemplate( ' ${timestamp} [${level}] ${message} ' );
// Definindo o Level
Logger.SetLevelName(TLoggerLevel.Info, ' INFORMATION ' );
Logger.SetLevelName(TLoggerLevel.Warn, ' WARNING ' );
// Gerando os logs
Logger.Info( ' My message with level INFO ' );
Logger.Warn( ' My message with level WARN ' );
// Output: 2022-12-01 09:00:05.600 [INFORMATION] My message with level INFO
// Output: 2022-12-01 09:00:05.600 [ WARNING ] My message with level WARN
Readln;
end . It is possible to show only the logs from a defined level , based on TLoggerLevel .
Setlevel default value = TLoggerLevel.All
Logger.SetLevel(TLoggerLevel.Warn); - Only logs will be recorded with Warn / Error / Fatal / Custom . TLoggerLevel. All = ' Utilizado para operações internas '
TLoggerLevel.Trace = ' Level 1 '
TLoggerLevel.Debug = ' Level 2 '
TLoggerLevel.Info = ' Level 3 '
TLoggerLevel.Success = ' Level 4 '
TLoggerLevel.Warn = ' Level 5 '
TLoggerLevel.Error = ' Level 6 '
TLoggerLevel.Fatal = ' Level 7 '
TLoggerLevel.Custom = ' Level 8 ' uses
DataLogger,
DataLogger.Provider.Console;
begin
Logger.AddProvider(TProviderConsole.Create);
// Definindo o template
Logger.SetTemplate( ' ${timestamp} [${level}] ${message} ' );
// Definindo o Level
Logger.SetLevel(TLoggerLevel.Warn);
// Gerando os logs
Logger.Info( ' My message with level INFO ' );
Logger.Error( ' My message with level ERROR ' );
// Output: 2022-12-01 09:00:05.600 [ERROR] My message with level ERROR
Readln;
end . It is possible to disable some logs from the log, based on TLoggerLevel .
Setdisablevel Standard Value = []
Logger.SetDisableLevel([TLoggerLevel.Info, TLoggerLevel.Warn]); - Only logs will be registered with Tracer / Debug / Success / Error / Fatal / Custom . uses
DataLogger,
DataLogger.Provider.Console;
begin
Logger.AddProvider(TProviderConsole.Create);
// Definindo o template
Logger.SetTemplate( ' ${timestamp} [${level}] ${message} ' );
// Definindo o DisableLevel
Logger.SetDisableLevel([TLoggerLevel.Info, TLoggerLevel.Warn]);
// Gerando os logs
Logger.Debug( ' My message with level DEBUG ' );
Logger.Info( ' My message with level INFO ' );
Logger.Warn( ' My message with level WARN ' );
Logger.Error( ' My message with level ERROR ' );
// Output:
// 2022-12-01 09:00:05.500 [DEBUG] My message with level DEBUG
// 2022-12-01 09:00:05.600 [ERROR] My message with level ERROR
Readln;
end . It is possible to show only a few logs of the log, based on the TLoggerLevel .
Setonlylevel default value = [TLoggerLevel.All]
Logger.SetOnlyLevel([TLoggerLevel.Error]); - Only logs will be recorded with Error type. uses
DataLogger,
DataLogger.Provider.Console;
begin
Logger.AddProvider(TProviderConsole.Create);
// Definindo o template
Logger.SetTemplate( ' ${timestamp} [${level}] ${message} ' );
// Definindo o OnlyLevel
Logger.SetOnlyLevel([TLoggerLevel.Error]);
// Gerando os logs
Logger.Debug( ' My message with level DEBUG ' );
Logger.Info( ' My message with level INFO ' );
Logger.Warn( ' My message with level WARN ' );
Logger.Error( ' My message with level ERROR ' );
// Output:
// 2022-12-01 09:00:05.600 [ERROR] My message with level ERROR
Readln;
end .It is possible to capture exceptions generated by provides
SetLogexception default value = nil
uses
DataLogger,
DataLogger.Provider.Console;
begin
Logger.AddProvider(TProviderConsole.Create);
// Definindo o template
Logger.SetTemplate( ' ${timestamp} [${level}] ${message} ' );
// Definindo o LogException
Logger.SetLogException(
procedure( const Sender: TObject; const LogItem: TLoggerItem; const E: Exception; var RetriesCount: Integer)
begin
// Sender - Provider que gerou a exceção, para visualizar - Sender.ClassName
// LogItem - Contém todas as informações do log
// E - Contém as informações da exceção
// RetriesCount - Contém o número da tentativa realizada
// Caso seja alterado o valor para -1, o processo é interrompido
end
);
// Gerando o log
Logger.Error( ' My message with level ERROR ' );
// Output:
// 2022-12-01 09:00:05.600 [ERROR] My message with level ERROR
Readln;
end .It is possible to define the number of attempts that Provider should try to save the log.
Setmaxreries Standard Value = 5
uses
DataLogger,
DataLogger.Provider.Console;
begin
Logger.AddProvider(TProviderConsole.Create);
// Definindo o template
Logger.SetTemplate( ' ${timestamp} [${level}] ${message} ' );
// Definindo o máximo de tentativas
Logger.SetMaxRetries( 5 );
// Gerando o log
Logger.Error( ' My message with level ERROR ' );
// Output:
// 2022-12-01 09:00:05.600 [ERROR] My message with level ERROR
Readln;
end .It is possible to ignore the template and save all data generated by Datalogger;
SetIgnoreTemplate( { 1 } , { 2 } , { 3 } , { 4 } );
Parâmetros:
{ 1 } = (Boolean) = Defini se deve ignorar o Template.
{ 2 } = (string) = Defini qual texto vai fazer a separação das informações, semelhante ao CSV.
{ 3 } = (Boolean) = Defini se deve mostrar as palavras chaves de cada valor.
{ 4 } = (string) = Defini qual texto deve separar a palavra chave do valor.
Logger.SetIgnoreTemplate(True, ' | ' , True, ' -> ' );
{ palavra_chave } = " timestamp "
{ palavra_chave_separador } = " -> "
{ valor } = " 2022-09-15T14:39:38.896-03:00 "
{ separator } = " | "
// output timestamp -> 2022-09-15T14:39:38.896-03:00 | timestamp_format -> 2022-09-15 14:39:38.896 uses
DataLogger,
DataLogger.Provider.Console;
begin
Logger.AddProvider(TProviderConsole.Create);
// Definindo o template
Logger.SetTemplate( ' ${timestamp} [${level}] ${message} ' );
// Ignorando o log format
Logger.SetIgnoreTemplate(True, ' | ' , True, ' -> ' );
// Gerando o log
Logger.Error( ' My message with level ERROR ' );
// Output:
// timestamp -> 2022-09-15T14:39:38.896-03:00 | timestamp_format -> 2022-09-15 14:39:38.896 | name -> | sequence -> 1 | thread_id -> 3804 | level -> Trace | level_value -> 1 | tag -> | message -> My Trace | app_name -> ProviderTextFile | app_version -> 1.0.0.0 | app_path -> C:GithubDataLoggerSamplesTextFileWin32Debug | app_size -> 13,24 MB | computer_name -> DESKTOP-7RP1H3K | username -> danil | os_version -> Windows 10 (Version 21H2, OS Build 19044.1889, 64-bit Edition) | process_id -> 13608 | ip_local -> 192.168.56.1
Readln;
end .It is possible to define a name for the Datalogger that can be displayed in the log record. This name can be used to differentiate Datalogger when more than one instance.
Setname default value = EmptyStr
uses
DataLogger,
DataLogger.Provider.Console;
begin
Logger.AddProvider(TProviderConsole.Create);
// Definindo o template
Logger.SetTemplate( ' ${name} ${timestamp} [${level}] ${message} ' );
// Definindo o name
Logger.SetName( ' MyLogger ' );
// Gerando o log
Logger.Error( ' My message with level ERROR ' );
// Output:
// MyLogger 2022-12-01 09:00:05.600 [ERROR] My message with level ERROR
Readln;
end .It is possible to save the logs in real time, so that the next instruction of your code will only continue after the log is saved!
Currently logs are recorded in memory and then it is saved without locking the application.
Setlivemode Standard Value = false
uses
DataLogger,
DataLogger.Provider.Console;
begin
Logger.AddProvider(TProviderConsole.Create);
// Definindo o template
Logger.SetTemplate( ' ${name} ${timestamp} [${level}] ${message} ' );
// Definindo o LiveMode
Logger.SetLiveMode(True);
// Gerando o log
Logger.Error( ' My message with level ERROR ' );
// Output:
// MyLogger 2022-12-01 09:00:05.600 [ERROR] My message with level ERROR
Readln;
end .It is possible to work with transaction , just as it is used in other components with database connection.
The use of this procedure can be applied to the following situation;
Let's tell a little story:
We have an procedure that is performing, at each step, several log information is generated, so we always save this information, this makes our text file for example too much too big.
Now imagine being able to save the data only if there was any errors during execution or when necessary to really save the data.
The activation of the use of transaction must be made by provider with the UseTransaction(True) function.
Ex:
Logger.AddProvider(
TProviderConsole.Create
.UseTransaction(True) // Enable transaction only on this provider
);It starts a new transaction.
Confirms the record of all logs in the transaction.
Cancels all logs generated in the transaction.
Sample with transaction
uses
DataLogger,
DataLogger.Provider.Console;
begin
Logger.AddProvider(TProviderConsole.Create.UseTransaction(True));
// Definindo o template
Logger.SetTemplate( ' ${timestamp} [${level}] ${message} ' );
// Iniciando a transaction
Logger.StartTransaction;
Writeln( ' Iniciou a transaction ' );
// Gerando o log
Logger.Info( ' My message with level INFO 1 ' );
Logger.Info( ' My message with level INFO 2 ' );
Logger.Info( ' My message with level INFO 3 ' );
Logger.Info( ' My message with level INFO 4 ' );
Logger.Info( ' My message with level INFO 5 ' );
Logger.Info( ' My message with level INFO 6 ' );
Logger.Info( ' My message with level INFO 7 ' );
Logger.Info( ' My message with level INFO 8 ' );
Logger.Info( ' My message with level INFO 9 ' );
Writeln( ' Terminou os Logs ' );
// Fazendo o commit
Logger.CommitTransaction;
Writeln( ' Fez os commits ' );
Readln;
end .Sample with nestled transaction
Nestile transactions gives the possibility of greater management when saving the information.
uses
DataLogger,
DataLogger.Provider.Console;
begin
Logger.AddProvider(TProviderConsole.Create.UseTransaction(True));
// Definindo o template
Logger.SetTemplate( ' ${timestamp} [${level}] ${message} ' );
// Iniciando a transaction
Logger.StartTransaction;
try
// Gerando o log
Logger.Info( ' My message with level INFO 1 ' );
Logger.Info( ' My message with level INFO 2 ' );
Logger.Info( ' My message with level INFO 3 ' );
Logger.Info( ' My message with level INFO 4 ' );
// Iniciando 2 transaction
Logger.StartTransaction;
try
Logger.Info( ' My message with level INFO 5 ' );
Logger.Info( ' My message with level INFO 6 ' );
finally
// fazendo Rollback da segunda transaction
Logger.RollbackTransaction;
end ;
Logger.Info( ' My message with level INFO 7 ' );
Logger.Info( ' My message with level INFO 8 ' );
Logger.Info( ' My message with level INFO 9 ' );
finally
// Fazendo o commit
Logger.CommitTransaction;
end ;
Readln;
end .