记录用户操作

时间:2008-12-24 11:19:09

标签: java struts logging aspectj

客户希望我们“记录”用户在我们系统上执行的“操作”:主要是创建,删除和更新。 我已经有一个记录跟踪的方面,但是在每个方法调用记录的情况下工作都很低。 因此,如果用户单击“打开医疗文件”按钮,则日志将显示为:

  1. closePreviousFiles(“病人零”)
  2. createMedicalFile(“患者零”) - >文件#001
  3. changeStatus(“#001”) - >开
  4. ,而期望的结果是:

    1. 为患者零打开医疗档案#001
    2. 我正在考虑使用日志语句来检测Struts2操作,但我想知道......还有其他方法吗?我可能会再次使用AspectJ(或过滤器)并将逻辑保留在一个位置,以便我可以轻松配置日志,但是我担心一切都会变得难以理解(即“此操作的日志是错误的” ......我应该在哪里寻找麻烦?“)。

4 个答案:

答案 0 :(得分:3)

听起来您的客户希望审核用户在系统中的操作。

考虑在每个操作的入口点(来自Web请求)启动一个带有枚举/常量的审核条目。如果可能,使用用户提供的信息填充它。

退出/最后,在审核中指明它是成功还是失败。 伪代码中的一个例子:

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();
  }
}

这里重要的是保存所有用户操作,无论成功与否。此外,客户真的需要知道所有相关信息以及行动。

由于我们正在记录操作常量和数据,因此可以单独编写对客户端的审计表示。您也获得了灵活性,因为更改表示字符串(例如“打开医疗文件#001为患者零”到“患者零#001医疗文件打开”)在行动时尚未确定,但稍后确定。必须重新审核审核数据。

答案 1 :(得分:1)

我最近发布了后处理日志以生成摘要。您可能需要考虑这种方法,特别是如果上述日志中的#2和#3是在不同的地方生成的,并且所需的结果需要将状态从一个地方带到另一个地方。

答案 2 :(得分:1)

如果您正在处理医疗数据,您可能需要考虑记录和版本控制。我甚至会想到用数据库触发器做这件事。我没有做很多Java编程,但我已经与学生信息系统团队讨论了这个问题。他们在后端使用Oracle并在其连接中注册会话变量。它们的触发器使用此会话变量来创建关键表的日志条目和版本历史记录(在更新/删除时)。这为他们提供了审计和回滚功能。我认为这两种方法对医疗记录应用都很有用。

他们还使用log4j进行应用程序级日志记录,但数据记录在数据库中进行。

答案 3 :(得分:1)

我在Struts2动作中做过类似的事情,我使用了“log4j”。根据您的Application Server,它可能具有允许使用消息目录的集成日志记录系统(例如:Weblogic)。