No vídeo de hoje, iremos responder a dúvida em como fazer um log genérico para criar arquivos txt.
Hoje, a dúvida foi feita pelo grande Bruno, onde ele perguntou que toda vez para criar logs, tem que usar FWFileWriter ou FWrite e portanto se existe alguma forma mais fácil do que sempre ter que escrever várias linhas.
Foi desenvolvido uma classe, chamada zLogGeneric, onde através de poucos comandos, é gerado o arquivo com o conteúdo.
E abaixo o código fonte desenvolvido para exemplificar:
//Bibliotecas
#Include "TOTVS.ch"
/*/{Protheus.doc} zLogGeneric
Classe para gerar um log genérico de arquivo txt
@author Atilio
@since 29/12/2021
@example
//Variáveis usadas
cPasta := "C:\logs\"
cArquivo := "log.txt"
lHora := .T.
//Cria o log
oLogGen := zLogGeneric():New(cPasta, cArquivo, lHora)
//Adiciona um texto
oLogGen:AddText("Usuário clicou no botão Confirmar")
//Encerra e mostra o txt
oLogGen:Finish()
/*/
Class zLogGeneric
//Atributos
Data cDirectory
Data cFileName
Data lShowTime
Data oFWriter
Data lOpenFile
//Métodos
Method New() CONSTRUCTOR
Method AddText()
Method Finish()
EndClass
Method New(cDir, cFile, lShow, lOpen) Class zLogGeneric
Default cDir := GetTempPath()
Default cFile := "log_" + dToS(Date()) + "_" + StrTran(Time(), ":", "-") + ".txt"
Default lShow := .T.
Default lOpen := .T.
//Se a pasta não existir, cria ela
If ! ExistDir(cDir)
MakeDir(cDir)
EndIf
//Define os atributos
::cDirectory := cDir
::cFileName := cFile
::lShowTime := lShow
::lOpenFile := lOpen
//Cria o arquivo de logs
::oFWriter := FWFileWriter():New(::cDirectory + ::cFileName, .T.)
//Se houve falha ao criar, mostra a mensagem
If ! ::oFWriter:Create()
Final("Houve um erro ao criar o arquivo - " + ::oFWriter:Error():Message)
//Senão, no log escreve um cabeçalho para identificar a rotina
Else
::oFWriter:Write("Código do Usuário: " + RetCodUsr() + CRLF)
::oFWriter:Write("Nome do Usuário: " + UsrRetName(RetCodUsr()) + CRLF)
::oFWriter:Write("Função (FunName): " + FunName() + CRLF)
::oFWriter:Write("Ambiente: " + GetEnvServer() + CRLF)
::oFWriter:Write(CRLF)
::oFWriter:Write("Log iniciado, data [" + dToC(Date()) + "] e hora [" + Time() + "]" + CRLF)
::oFWriter:Write("--" + CRLF)
::oFWriter:Write(CRLF)
EndIf
Return Self
Method AddText(cText) Class zLogGeneric
Default cText := ""
//Se for mostrar a hora, adiciona ela a esquerda
If ::lShowTime
cText := "[" + Time() + "] " + cText
EndIf
//Escreve o texto do log
::oFWriter:Write(cText + CRLF)
Return
Method Finish() Class zLogGeneric
//Mostra um texto no fim do arquivo
::oFWriter:Write(CRLF)
::oFWriter:Write("--" + CRLF)
::oFWriter:Write("Log encerrado, data [" + dToC(Date()) + "] e hora [" + Time() + "]")
//Encerra o arquivo
::oFWriter:Close()
//Se não for via job/webservice e tiver definido para abrir o arquivo
If ! IsBlind() .And. ::lOpenFile
ShellExecute("OPEN", ::cFileName, "", ::cDirectory, 1)
EndIf
Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.