Criar um log em txt de forma genérica | Ti Responde 003

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
 
    //Métodos
    Method New() CONSTRUCTOR
    Method AddText()
    Method Finish()
EndClass
 
Method New(cDir, cFile, lShow) Class zLogGeneric
    Default cDir  := GetTempPath()
    Default cFile := "log_" + dToS(Date()) + "_" + StrTran(Time(), ":", "-") + ".txt"
    Default lShow := .T.
 
    //Se a pasta não existir, cria ela
    If ! ExistDir(cDir)
        MakeDir(cDir)
    EndIf
 
    //Define os atributos
    ::cDirectory := cDir
    ::cFileName  := cFile
    ::lShowTime  := lShow
 
    //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, abre o arquivo
    If ! IsBlind()
        ShellExecute("OPEN", ::cFileName, "", ::cDirectory, 1)
    EndIf
Return

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan Atilio (Daniel Atilio)
Especialista em Engenharia de Software pela FIB. Entusiasta de soluções Open Source. E blogueiro nas horas vagas.

Deixe uma resposta