Eu estava planejando registrar muitas coisas diferentes no meu ambiente de produção, como quando um usuário:
- Logins, Logoffs
- Mudar perfil
- Editar configurações da conta
- Alterar senha ... etc
Essa é uma boa prática a ser adotada em um ambiente de produção? Além disso, qual é uma boa maneira de registrar tudo isso. Atualmente, estou usando o seguinte bloco de código para fazer logon:
public void LogMessageToFile(string msg)
{
System.IO.StreamWriter sw = System.IO.File.AppendText(
GetTempPath() + @"MyLogFile.txt");
try
{
string logLine = System.String.Format(
"{0:G}: {1}.", System.DateTime.Now, msg);
sw.WriteLine(logLine);
}
finally
{
sw.Close();
}
}
Isso será bom para a produção? Meu aplicativo é muito novo, por isso não estou esperando milhões de usuários imediatamente ou algo assim, procurando as melhores práticas para acompanhar as ações em um site ou, se é mesmo, as melhores práticas.
Database
arquivo de texto excedente ...a User Activity Logger that hooks up various events
, você pode vê-lo aqui: stackoverflow.com/questions/30326673/… . Apreciar!Respostas:
Esta não é uma resposta direta à pergunta, é mais uma expansão nela.
Quando você inicia um novo aplicativo, recomendo registrar tudo o que o usuário faz: faça login, efetue logout, risque seu a **, tudo. Se for baseado na Web, considere usar mapas de calor para saber o que o mouse estava fazendo.
Quando eu estava no projeto BravoX na Xerox, no final dos anos 70, gravamos movimentos de mouse pixel por pixel para descobrir como os usuários poderiam usar essa coisa estranha chamada editor WYSIWYG. Assistíamos a reproduções de sessões de usuários durante o almoço. Foi extremamente instrutivo. Descobrimos um padrão de uso que chamamos de Charlie Browning - o usuário selecionava algum texto e o tornava em itálico ... depois desfaziam ... depois refaziam ... e para trás e para frente e para trás. Acontece que eles estavam tentando entender essas coisas em um nível emocional. Então nós (Greg Kusnik fez o código, se a memória servir) colocamos algumas otimizações específicas para suportar exatamente esse comportamento.
Sem a gravação, nunca teríamos pensado em fazer isso.
fonte
Se eu fosse você e continuasse escrevendo um arquivo de texto, usaria o log4net e entraria em um arquivo "UserActions.log" específico. Dessa forma, não atrapalha seu registro normal. Ao usar o log4net (ou qualquer outra estrutura de registro), você pode evitar reinventar a roda e alavancar os anexadores de arquivos contínuos, os códigos de aviso / erro / depuração / informação, a gravação de arquivos em lotes etc. É sempre uma boa idéia criar um bom registro no qualquer aplicação em nível de produção.
Na realidade, porém, é provavelmente melhor armazenar todas essas informações em um banco de dados. O uso de um banco de dados permitirá classificá-lo, agregá-lo e fazer estatísticas mais fáceis
fonte
Os arquivos de log são usados 1. para obter informações sobre erros no sistema de depuração. 2. pesquisar a atividade do usuário por danos ou 3. entender como as pessoas usam o sistema quando você não pode vê-lo. Com aquilo em mente:
phone{(999)999-9999} email{[email protected]}
. As senhas nunca devem ser gravadas em nenhum lugar, exceto no banco de dados de uma maneira, função de hash criptograficamente segura com sal exclusivo para cada usuário e várias rodadas de hash (consulte a nota de rodapé)Done: 49ms
Outras dicas
Nota de rodapé: Para conectar alguém, faça o hash da senha fornecida com o mesmo algoritmo de hash e o sal do hash original para esse usuário. Se o hash da senha fornecida corresponder ao hash da senha armazenado no banco de dados, eles serão conectados. Para que isso funcione, você deve definir o conjunto de caracteres da sua senha, desaprovar o caractere de substituição Unicode e quaisquer outros caracteres fora do seu conjunto.
fonte
Você não especifica se está usando um banco de dados, mas se estiver e esse banco de dados é o SQL Server, poderá adicionar algo chamado AutoAudit e registrar automaticamente todas as interações com seus dados. Apenas certifique-se de especificar apenas os objetos que você deseja auditar.
De qualquer forma, eu não tentaria codificar manualmente meu rastreamento, pois isso acabaria sendo um pesadelo para a manutenção.
Além disso, para o registro, não faça o seu próprio, use o Enterprise Library Logging ou Log4Net ou similar.
fonte
Apenas um conselho geral. Pode não estar diretamente relacionado à sua pergunta.
Depende do que você usará os logs. Principalmente, os logs são usados na produção para detectar as operações que causam os erros. Se você os mantém para rastrear as ações do usuário, isso não faz parte do log. Esse deve ser o recurso do lado do servidor do produto. Definitivamente, essas coisas precisam entrar no banco de dados para estudos posteriores. Mas os logs do lado do servidor, como "Ocorreu um erro, pois algum texto está vazio", não fazem parte do recurso. Essas coisas precisam estar no sistema de arquivos. Eles devem ter o seguinte conteúdo com eles: - user_id, error_number, error_text, file_name, function_name, thread_id, system_date_time e qualquer outro contexto.
Agora estou falando apenas dos logs nos arquivos.
1) Mantenha-os assíncronos. A operação de E / S é cara.
2) Projete-os como classe e função. Mudanças futuras serão fáceis.
3) Mantenha-os únicos, se possível. Singleton é difícil em multiencadeamento, portanto, projete corretamente.
4) Também é melhor manter a interação entre o logger e o loggee simples. Na maioria das vezes, envie o número da mensagem que o texto da mensagem real e permita que o criador de logs receba a mensagem do número. Isso ajudará se mais tarde desejarmos fazer alterações nos formatos genéricos de log.
Normalmente, o logger e também as coisas que precisamos registrar devem fazer parte do design. Vi casos em que houve alterações no design apenas para garantir que todas as informações relevantes sejam registradas corretamente.
fonte
Experimente o Log4Net. Ele permite que você efetue login em arquivos ou banco de dados. Aqui está o tutorial !
Usamos o Log4Net em todos os nossos projetos.
fonte
O uso de um arquivo de log apresenta alguns problemas. Primeiro, você pode receber erros quando vários processos tentam acessar o arquivo. Você também pode ter problemas ao tentar alternar ou limpar o arquivo enquanto o sistema está em execução. A maneira de contornar isso é usar um banco de dados.
Portanto, a etapa 1 é criar uma tabela de banco de dados. Sugiro os seguintes campos:
* ID do usuário
* Ação (por exemplo, logon, excluir foo)
* Algum texto descritivo (permita nulos aqui)
* carimbo de data / hora
Etapa 2, crie um procedimento armazenado com entrada para ID do usuário, ação e texto descritivo. Basta usar a hora atual para criar o carimbo de hora.
Etapa 3, escreva um método de registro em uma biblioteca compartilhada conveniente para facilitar a inclusão em qualquer lugar e entrar na prática de chamar esse método conforme necessário. Você também pode ter uma lógica de sinalizador de nível de log para alterar o que é registrado.
Etapa 4, crie uma rotina de manutenção para limpar as mensagens antigas da tabela de log de tempos em tempos. Talvez exclua quando tiver mais de X, execute cada semana mais ou menos como parte da manutenção regular do banco de dados (reconstrução do índice, etc.).
Depois de criar isso uma vez, você poderá usar o código envolvido em outros projetos.
fonte