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.