MultiLog4D é uma biblioteca projetada para facilitar e agilizar o envio de logs para Android, iOS, Windows, macOS e Linux. Com apenas uma linha de código é possível enviar uma mensagem que será vista e monitorada na plataforma correspondente, como adb logcat no Android ou
syslog no Linux, como exemplo.
Basta baixar os fontes do GitHub, descompactar em uma pasta de sua preferência e no seu projeto apontar para essa pasta no Search Path do projeto ou se preferir pode utilizar o Boss (gerenciador de dependências do Delphi) para realizar a instalação:
boss install github.com/adrianosantostreina/MultiLog4D
Existem diversas formas de utilizar o MultiLog4D, detalharemos todas a seguir, mas a que mais gosto é utilizar a classe TMultiLog4DUtil presente na unidade MultiLog4D.Util.pas. É uma classe Singleton que pode ser chamada de qualquer parte do seu projeto Delphi.
Declare a unidade na cláusula uses do seu formulário e chame a linha abaixo:
uses
MultiLog4D.Util;
procedure TForm1.Button1Click(Sender: TObject);
begin
TMultiLog4DUtil
.Logger
.Tag('MultiLog4D')
.LogWriteInformation('Qualquer log aqui...')
end;
Uma observação importante é que o TAG precisa ser informada obrigatoriamente para Android e iOS, do contrário você não conseguirá filtrar os logs no Terminal do Windows em aplicativos Android e no Console do macOS para aplicativos iOS. O MultiLog4D não irá validar se o tag foi inserido ou não, então você precisa lembrar de chamar o método. Se você não indicar uma TAG, o MultiLog4D definirá a TAG padrão com o nome "MultiLog4D".
A TAG será utilizada para filtrar todas as mensagens da sua aplicação no Terminal quando o monitoramento for solicitado:
Usando qualquer janela de Terminal no Windows, você precisa basicamente usar o adb com o comando logcat para visualizar os logs.
adb logcat <MyTAG>:D *:S
Substitua pelo tag inserido no MultiLog4D, por exemplo:
adb logcat MyAppAndroid:D *:S
✍️ Observação: Seu dispositivo Android deverá estar em Modo Desenvolvedor, com depuração USB ativada. E caso possua mais de um dispostivo conectado na porta USB, precisará do UUID do disposito o qual fará o monitoramento dos logs. Use o comando a seguir para visualizar os UUID.
adb devices
Esse comando mostrará todos os UUID's de todos os dispositivos conectados ao USB. Em seguida filtre o log usando o comando a seguir:
adb -s <UUID> logcat MyAppAndroid:D *:S
Substitua pelo UUID do seu dispositivo.
No iOS, monitorar os logs deve ser feito pelo aplicativo Console no macOS. Busque pelo aplicativo Console na busca do macOS. Ao abrir o aplicativo, o dispositivo iPhone/iPad que estiver usando para testar seu app aparecerá na barra lateral, apenas clique nele e pronto, os logs desse dispositivo aparecerão na janela.
No Windows podemos enviar os logs para Console, Visualizador de Eventos e para arquivo. Para isso há um método a ser configurado, o Output. Ele possui as variações:
TMultiLog4DUtil
.Logger
.Output([loConsole, loFile, loEventViewer])
.LogWriteInformation('Inicializando...');
Como pode ver, é um array de opções e você configura como desejar.
- Filename
Você pode configurar a pasta e o nome do arquivo de log que será gerado, do contrário o MultiLog4D criará automaticamente um diretório log e um arquivo com nome padrão. Para configurar isso, basta chamar o método:
TMultiLog4DUtil
.Logger
.FileName('C:\MeusLogs\ExemploDeLog')
.LogWriteInformation('Inicializando...');
A biblioteca acrescentará a data e a extensão do arquivo.
ExemploDeLog_20241001_010720.log
ou seja, YYYYDDMM hhmmss.log
- SetLogFormat
Você pode formatar a saída do log:
Default: ${time} ${username} ${eventid} [${log_type}] - ${message}
Possible values: category
TMultiLog4DUtil
.Logger
.SetLogFormat('${time} ${username} ${eventid} [${log_type}] - ${message}')
.LogWriteInformation('Inicializando...');
Estamos avaliando outras informações que poderão fazer parte do log. Caso você tenha sugestões, envie-as através das ISSUES.
- SetDateTimeFormat
Você pode personalizar o formato de DataHora.
TMultiLog4DUtil
.Logger
.SetDateTimeFormat('YYYY-DD-MM hh:mm:ss')
.LogWriteInformation('Inicializando...');
- Category
Você pode personalizar a categoria do log para melhor encontrar os erros e informações no seu projeto. As opções de categoria estão previstas na classe TEventCategory no arquivo MultiLog4D.Types.
Os valores possíveis são:
TMultiLog4DUtil
.Logger
.Category(ecApplication)
.LogWriteInformation('Inicializando...');
- EventId
Se você possuir uma classe própria de erros e mapeou usando uma numeração, é possível usar essa numeração para mostrar no log. Por exemplo:
Caso essa seja sua forma própria de indentificar possíveis erros, use esse número no log.
TMultiLog4DUtil
.Logger
.EventId(1000)
.LogWriteInformation('Inicializando...');
No Linux os logs são enviados para a saída padrão do sistema operacional, ou seja, para o syslog. Não é possível enviar logs para arquivos, portanto basta fazer o monitoramento do log usando a linha de comando abaixo no terminal do Linux:
tail -f /var/log/syslog
No Linux você ainda pode configurar o EventId mencionado na seção anterior.
Aplicações para macOS também podem ser monitoradas e receber logs diretamente do Delphi. A forma de monitoramento acontece exatamente como no iOS, através do Console. Retorne na seção sobre iOS para entender como visualizar os logs. A única diferença é que você verá o nome do seu dispositivo mac na barra lateral do macOS.
Assim como no Linux, não é possível criar logs em arquivo. Caso você veja a necessidade de enviar o log também para arquivo, envie sua sugestão através das ISSUES.
Você tem a opção de desativar ou ativar o log a qualquer momento, basta usar a propriedade EnableLog conforme mostrado abaixo:
TMultiLog4DUtil
.EnableLog(False);
✍️ Observação: O default dessa propriedade é True.
A biblioteca possui ao todo 05 (Cinco) métodos de Log, são eles:
Nesse método você precisa definir no segundo parâmetro qual tipo de log deseja enviar, ou seja: Information, Warning, Error ou Fatal Error.
TMultiLog4DUtil
.LogWrite('Mensagem', lgInformation);
Em seguida você terá os métodos:
Nesses não é necessário informar o tipo de log pois já será direcionado internamente para a biblioteca.
✍️ Observação: Você pode também encadear várias mensagens em uma única chamada.
TMultiLog4DUtil
.LogWriteInformation('Inicializando o sistema')
.LogWriteInformation('Conectando ao servidor')
.LogWriteWarning('Validação de status de usuário');
✍️ Exemplo de uso em uma Exceção:
procedure TForm1.Button1Click(Sender: TObject)
begin
try
//seu código
except on E:Exception do
begin
TMultiLog4DUtil
.LogWriteError(Format('Erro: %s | %s', [E.ClassName, E.Message]));
end;
end;
end;
Caso esteja procurando incluir logs em API's desenvolvidas em Horse, saiba que isso também é possível, tanto para Windows quanto para Linux. O processo é o mesmo, basta adicionar a biblioteca baixando-a ou instalando através do boss que vai funcionar exatamente como explicado até aqui.
🤔 Lembrando apenas que no Windows podemos adicionar logs no Console, EventViewer e em Arquivos. Veja um exemplo de código:
uses
Horse,
MultiLog4D.Common,
MultiLog4D.Util,
MultiLog4D.Types,
System.IOUtils,
System.SysUtils;
begin
TMultiLog4DUtil
.Logger
.LogWriteInformation('Start Application');
THorse
.Get('/test1',
procedure(Req: THorseRequest; Res: THorseResponse)
begin
Randomize;
TMultiLog4DUtil
.Logger
.LogWriteInformation('Before Test1 - ' + Format('Mensagem de teste 1 de log: %d', [Random(1000)]));
Res.Send('test1');
TMultiLog4DUtil
.Logger
.LogWriteInformation('After Test1 - ' + Format('Mensagem de teste 1 de log: %d', [Random(1000)]));
end
);
THorse
.Listen(9000);
end.
MultiLog4D
é uma biblioteca gratuita e de código aberto licenciada sob a MIT License.