package br.com.citframework.log;
import java.io.File;
import java.io.FileFilter;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import br.com.centralit.citcorpore.util.Enumerados.ParametroSistema;
import br.com.centralit.citcorpore.util.ParametroUtil;
import br.com.citframework.dto.LogDados;
import br.com.citframework.util.UtilDatas;
import br.com.citframework.util.UtilTratamentoArquivos;
/**
* @author ronnie.lopes
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public class DbLogArquivo implements Log {
private String pathArqBancoLog;
private String fileArqBancoLog;
private String extArqBancoLog;
public DbLogArquivo(){
inicializarParametros();
}
/**Inicializa o DbLogArquivo com o caminho da grava��o do arquivo, nome do arquivo, e extens�o do arquivo
* @author ronnie.lopes
*/
private void inicializarParametros(){
try {
pathArqBancoLog = ParametroUtil.getValorParametroCitSmartHashMap(ParametroSistema.PATH_ARQ_BANCO_LOG, "C:/Program Files/jboss/server/default/deploy/CitCorpore.war/logBancoDados");
fileArqBancoLog = "/log_DB_citsmart";
extArqBancoLog = "txt";
}catch (Exception e) {
e.printStackTrace();
}
}
/**Monta a estrutura do log(nome do arquivo e mensagem) e envia para registrar no arquivo TXT
* @author ronnie.lopes
*/
public void registraLog(String mensagem, Class classe, String tipoMensagem) throws Exception {
Date dataAtual = UtilDatas.getDataAtual();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String nomeArquivo = pathArqBancoLog + fileArqBancoLog + "_" + sdf.format(dataAtual) + "." + extArqBancoLog;
manterPastaArqUltimoCincoDias(pathArqBancoLog);
synchronized (nomeArquivo) {
List lista = new ArrayList();
lista.add("["+tipoMensagem+"] - "+classe.getName()+" - "+mensagem);
UtilTratamentoArquivos.geraFileTXT(nomeArquivo, lista, true);
}
}
/**Monta a estrutura do log com tratamento de excess�o
* @author ronnie.lopes
*/
public void registraLog(Exception e, Class classe, String tipoMensagem) throws Exception {
Date dataAtual = UtilDatas.getDataAtual();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String nomeArquivo = pathArqBancoLog + fileArqBancoLog + "_" + sdf.format(dataAtual) + "." + extArqBancoLog;
manterPastaArqUltimoCincoDias(pathArqBancoLog);
List lista = new ArrayList();
lista.add("["+tipoMensagem+"] - "+sdf.format(dataAtual)+" - "+classe.getName()+" - Exception:");
synchronized (nomeArquivo) {
FileOutputStream fos = new FileOutputStream(nomeArquivo, true);
PrintStream out = new PrintStream(fos);
UtilTratamentoArquivos.geraFileTXT(nomeArquivo, lista, out);
e.printStackTrace(out);
try{
fos.close();
}catch(Exception e1){
System.out.println("Erro ao fechar arquivo de log: "+nomeArquivo);
e1.printStackTrace();
}
}
}
/**Verifica se o arquivo � do DbLogArquivo e Mant�m apenas os arquivos dos �ltimos 5 dias,
* excluindo o arquivo que foi criado a 6 dias atr�s referente a data atual
* @author ronnie.lopes
*/
public void manterPastaArqUltimoCincoDias(String localArquivo) {
File localArq = new File(localArquivo);
File[] arquivosPasta = localArq.listFiles(new FileFilter() {
public boolean accept(File pathname) {
return pathname.getName().toLowerCase().contains("log_db_citsmart");
}
});
if(arquivosPasta != null && arquivosPasta.length > 0 && arquivosPasta.length > 6 && arquivosPasta != null) {
Date dataAtual = UtilDatas.getDataAtual();
for (File arquivo : arquivosPasta) {
File[] arquivosPastaCont = localArq.listFiles(new FileFilter() {
public boolean accept(File pathname) {
return pathname.getName().toLowerCase().contains("log_db_citsmart");
}
});
if(arquivosPastaCont.length > 6) {
long milesegDataModifArq = arquivo.lastModified();
Date dataModifArq = new Date(milesegDataModifArq);
Integer difDiasDatas = UtilDatas.dataDiff(dataModifArq, dataAtual);
if(difDiasDatas > 5) {
arquivo.delete();
}
}else{
return;
}
}
}
}
/**Formata em string o objeto logDados
* @author ronnie.lopes
* @throws Exception
*/
public String formatarStringLogDados(LogDados logDados) throws Exception {
StringBuilder texto = new StringBuilder();
if(logDados != null) {
texto.append(" Data Hora Atualiza��o: " + logDados.getDtAtualizacao() + " | "
+ " Opera��o: " + logDados.getOperacao() + " | "
+ " Dados: " + logDados.getDados() + " | "
+ " Id Usu�rio: " + logDados.getIdUsuario() + " | "
+ " Nome Usu�rio: " + logDados.getNomeUsuario() + " | "
+ " Local Origem: " + logDados.getLocalOrigem() + " | "
+ " Nome Tabela: " + logDados.getNomeTabela());
return texto.toString();
}else{
return null;
}
}
}