Boa Noite,
Pessoal gostaria de saber como fazer log do sistema ou seja gravar que usuario entro em tal horario,
o que ele fez no sistema se cadastro produto se excluio produto e por ai vai, alguém tem alguma ideia ???
bjosS…
Boa Noite,
Pessoal gostaria de saber como fazer log do sistema ou seja gravar que usuario entro em tal horario,
o que ele fez no sistema se cadastro produto se excluio produto e por ai vai, alguém tem alguma ideia ???
bjosS…
“Ao escolher a opção remover”
“Realmente deseja remover? (SIM/NAO)”
“Sim: verificar banco de dados -> remover -> adicionar log ao banco de dados.”
Faça com que uma área do banco de dados tenha uma parte só de logs.
[quote=VA]“Ao escolher a opção remover”
“Realmente deseja remover? (SIM/NAO)”
“Sim: verificar banco de dados -> remover -> adicionar log ao banco de dados.”
Faça com que uma área do banco de dados tenha uma parte só de logs. [/quote]
Como faço isso ???
[quote=VA]“Ao escolher a opção remover”
“Realmente deseja remover? (SIM/NAO)”
“Sim: verificar banco de dados -> remover -> adicionar log ao banco de dados.”
Faça com que uma área do banco de dados tenha uma parte só de logs. [/quote]
Eu utilizo MySql
Você já utilizou o MySql para gravar alguma coisa?
Se sim: faça da mesma forma, apenas crie uma nova tabela utilizando agora apenas uma área para texto.
Se não: leia um pouco sobre insert/remove e o básico da ligação java -> mySql. Apos aprender a inserir qualquer informação no mySql você com certeza conseguirá fazer isso ai.
Obs.: não vou postar o código pq estou sem mySql aqui pra testar.
Talvez alguém possa dar para você um código pré-pronto ou informações melhores. Valeu
[quote=VA]Você já utilizou o MySql para gravar alguma coisa?
Se sim: faça da mesma forma, apenas crie uma nova tabela utilizando agora apenas uma área para texto.
Se não: leia um pouco sobre insert/remove e o básico da ligação java -> mySql. Apos aprender a inserir qualquer informação no mySql você com certeza conseguirá fazer isso ai.
Obs.: não vou postar o código pq estou sem mySql aqui pra testar.
Talvez alguém possa dar para você um código pré-pronto ou informações melhores. Valeu
[/quote]
Sim eu sei como inserir valores no banco, logar no banco agora queria saber como faz para fazer log do que os usuarios fazem no sistema e se possivel exibir um relatorio sobre isto,
e isto deixaria o banco mais lento ??
Você não insere informações como: nome do produto, valor do produto…
Você vai ter que dividir o banco de dados em partes.
produto: |nomeDoProduto|valor|…
usuario: |nomedoUsuario|usuario|senha…
log: |data|texto|
Verifique qual usuário está logado e insira informações ao log.
“Ao clickar no botão remover:”
“Verifique o usuário, me retorne o seu nome” (função de pesquisa mySql)
String text = “nomeDoUsuario” + “removeu alguma coisa”.
Insira o text no “texto” do log.
[quote=VA]Você não insere informações como: nome do produto, valor do produto…
Você vai ter que dividir o banco de dados em partes.
produto: |nomeDoProduto|valor|…
usuario: |nomedoUsuario|usuario|senha…
log: |data|texto|
Verifique qual usuário está logado e insira informações ao log.
“Ao clickar no botão remover:”
“Verifique o usuário, me retorne o seu nome” (função de pesquisa mySql)
String text = “nomeDoUsuario” + “removeu alguma coisa”.
Insira o text no “texto” do log.[/quote]
Por exemplo para deletar eu uso DELETE FROM PRODUTOS WHERE codigo = ?
como seria para eu memorizar o usuario e a data que fizeram isso no banco???
muitas formas de se fazer isso, vou falar uma conhecida:
Trigger no Banco de dados.
você cria tabelas espelho das suas tabelas ex:
Tabela LogChamado referênte a tabela Chamado.
no próprio banco de dados, você cria uma trigger que sempre que alguem -. Incluir / Alterar / Excluir algum registro da tabela, seu trigger é ativado e ele é responsável por gravar a mesma informação na tabela espelho.
alguns exemplos no MYSQL
[code]/* Trigger for INSERT */
CREATE TRIGGER HistoryTableInsert AFTER INSERT ON OriginalTable FOR EACH ROW BEGIN
DECLARE N DATETIME;
SET N = now();
INSERT INTO HistoryTable (Column1, Column2, …, Columnn, StartDate, EndDate)
VALUES (NEW.Column1, NEW.Column2, …, NEW.Columnn, N, NULL);
END;
/* Trigger for DELETE */
CREATE TRIGGER HistoryTableDelete AFTER DELETE ON OriginalTable FOR EACH ROW BEGIN
DECLARE N DATETIME;
SET N = now();
UPDATE HistoryTable
SET EndDate = N
WHERE Column1 = OLD.Column1
AND EndDate IS NULL;
END;
/* Trigger for UPDATE */
CREATE TRIGGER HistoryTableUpdate AFTER UPDATE ON OriginalTable FOR EACH ROW BEGIN
DECLARE N DATETIME;
SET N = now();
UPDATE HistoryTable
SET EndDate = N
WHERE Column1 = OLD.Column1
AND EndDate IS NULL;
INSERT INTO HistoryTable (Column1, Column2, …, Columnn, StartDate, EndDate)
VALUES (NEW.Column1, NEW.Column2, …, NEW.Columnn, N, NULL);
END;[/code]
Referência: http://en.wikipedia.org/wiki/Log_trigger
Se sua necessidade for meramente acadêmica, pra algum trabalho de faculdade ou parecido, implementar como foi sugerido do começo replicando a lógica de salvar o log em cada funcionalidade, é a maneira mais “direta” de fazer isso mesmo.
Mas se o objetivo for profissional, esses “cross-cutting concerns” como o log devem ser tratados de outras formas. Pode ser usado trigger, como foi dito acima. Ou se acabar sendo implementado na aplicação, talvez o melhor seja pensar em alguma forma de interceptor/aspecto para que a gravação do log seja “transparente” a programação das funcionalidades que se deseja logar. Resumindo, fazer com que a gravação do log seja “automática”, e não dependa da implementação direta das funcionalidades que estão sendo logadas.
Em tempos de JPA/Hibernate acredito que a estratégia mais comum seja criar um Listener ou Interceptor (eu particularmente gosto mais de usar triggers de banco).
Eu preciso do log para a area profissional levando em conta que tenho que chama eles depois no Ireport para exibir para o cliente para saber o que fez no sistema qual é o melhor caminho ???
o caminho mais conhecido, em várias linguagens é o trigger, eu faria por ele.
depois você cria uma classe para consultar os logs no banco…
[quote=rodrigo.uchoa]Se sua necessidade for meramente acadêmica, pra algum trabalho de faculdade ou parecido, implementar como foi sugerido do começo replicando a lógica de salvar o log em cada funcionalidade, é a maneira mais “direta” de fazer isso mesmo.
Mas se o objetivo for profissional, esses “cross-cutting concerns” como o log devem ser tratados de outras formas. Pode ser usado trigger, como foi dito acima. Ou se acabar sendo implementado na aplicação, talvez o melhor seja pensar em alguma forma de interceptor/aspecto para que a gravação do log seja “transparente” a programação das funcionalidades que se deseja logar. Resumindo, fazer com que a gravação do log seja “automática”, e não dependa da implementação direta das funcionalidades que estão sendo logadas.
Em tempos de JPA/Hibernate acredito que a estratégia mais comum seja criar um Listener ou Interceptor (eu particularmente gosto mais de usar triggers de banco).[/quote]
Mas pelo fato da Trigger ser uma maneira profissional,
sou obrigado a usar ela mesmo quando não compense em relação
a custo/benefício por dinheiro pago pelo sistema?
Já vi uns projetos desktop que fazem o log de eventos no sistema
chamando diretamente tipo uma tabela Auditoria
e gravando nela (usuário, data, hora, tela, função efetuada [cadastrar, salvar, alterar, excluir], e outros campos).
Abraço.
Resolvido obrigado Gente…!
[quote]Mas pelo fato da Trigger ser uma maneira profissional,
sou obrigado a usar ela mesmo quando não compense em relação
a custo/benefício por dinheiro pago pelo sistema?
Já vi uns projetos desktop que fazem o log de eventos no sistema
chamando diretamente tipo uma tabela Auditoria
e gravando nela (usuário, data, hora, tela, função efetuada [cadastrar, salvar, alterar, excluir], e outros campos). [/quote]
Você está certo sim. O que eu quis dizer na verdade era a solução que faz parte da “curva de normalidade das boas práticas”. No mundo imperfeito que nos vivemos, exceções devem ser aplicadas para quase tudo