Pergunta

O cliente quer que "log" as "ações" que um usuário realiza no nosso sistema: criação, exclusão e atualização, principalmente. Eu já tenho um aspecto que registra o traço, mas que funciona em um nível muito baixo registrando cada chamada de método. Portanto, se um usuário clicou no botão "arquivo médico aberto" o registro seria:

  1. closePreviousFiles ( "paciente zero")
  2. createMedicalFile ( "paciente zero") -> arquivo # 001
  3. changestatus ( "# 001") -> open

enquanto o resultado desejado é:

  1. aberto arquivo médico # 001 para o paciente de zero

Estou pensando em instrumentar as ações Struts2 com declarações de log, mas eu estou querendo saber ... há outra maneira de fazer isso? Eu poderia usar AspectJ novamente (ou de um filtro) e manter a lógica em um só lugar, para que eu possa configurar o log facilmente, mas então eu tenho medo tudo se tornará mais difícil de entender (ou seja, "o registro para esta ação está errada ... onde diabos eu deveria olhar para o problema? ").

Foi útil?

Solução

Parece que seu cliente quer uma trilha de auditoria de ações do usuário no sistema.

Considere que no ponto de entrada de cada ação (a partir de solicitação da web) para iniciar uma entrada de auditoria com um enum / constante na ação. Preenchê-lo com informações do usuário forneceu, se possível.

Na saída / finalmente, indicam na auditoria se for bem sucedido ou não. Um exemplo em pseudocódigo:

enum Actions {
  OPEN_MEDICAL_FILE
  ...
}

void handleRequest(...) {
  String patient = ...;
  Audit audit = new Audit(OPEN_MEDICAL_FILE);
  audit.addParameter("patient", patient);
  try {
     ... more things ..
     audit.addParameter("file", "#001");
     ... more things ...
     audit.setSuccess();
  } finally {
    audit.save();
  }
}

O que é importante aqui é que todas as ações do usuário são salvos, independentemente do sucesso ou fracasso. Além disso, o cliente realmente precisa saber todas as informações relevantes, juntamente com a ação.

Uma vez que estamos registrando constantes de ação e dados, a apresentação da auditoria para o cliente pode ser separadamente codificada. Você ganha flexibilidade também, desde uma mudança de corda apresentação (ex. "Abrir arquivo médico # 001 para o paciente zero" para "paciente zero, # 001 arquivo médico aberto) não é determinado no momento da ação, mas mais tarde. Você não' t tem que remassage os dados de auditoria.

Outras dicas

Recentemente, registros pós-processados ??para gerar resumo. Você pode querer considerar que a abordagem, especialmente se # 2 e # 3 nos registros acima são gerados em diferentes lugares e o resultado desejado seria necessário para transportar em torno de estado de um lugar para outro.

Se você estiver trabalhando com dados médicos que você pode querer considerar tanto o registo e controle de versão. Eu sequer pensar em fazer isso com gatilhos de banco de dados. Eu não faço um monte de programação Java, mas eu discuti esta questão com a nossa equipe Sistema de Informação do estudante. Eles usam Oracle no back-end e registrar uma variável de sessão com suas conexões. Seus gatilhos utilizar esta variável de sessão para criar entradas de log e histórias de versão (em atualizações / exclusões) de tabelas críticas. Isto dá-lhes tanto auditoria e recursos de reversão. Eu acho que ambos seriam úteis para uma aplicação de registros médicos.

Eles também usam log4j para fazer o log de nível de aplicação, mas o registro de dados ocorre no banco de dados.

Já fiz coisas semelhantes em ações Struts2, eu usei "log4j". Dependendo do seu servidor de aplicações, pode ter um sistema de registro integrado permitindo o uso de catálogos de mensagens (por exemplo .: Weblogic).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top