Java 记录用户操作

Java 记录用户操作,java,struts,logging,aspectj,Java,Struts,Logging,Aspectj,客户希望我们“记录”用户在系统上执行的“操作”:主要是创建、删除和更新。 我已经有了一个记录跟踪的方面,但它在相当低的级别上记录每个方法调用。 因此,如果用户单击“打开医疗文件”按钮,日志将显示: closePreviousFiles(“零号患者”) createMedicalFile(“零号患者”)-->文件#001 changeStatus(“#001”)-->打开 而期望的结果是: 已为零号患者打开医疗文件#001 我正在考虑使用日志语句检测Struts2操作,但我想知道。。。还有别的办法

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

  • closePreviousFiles(“零号患者”)
  • createMedicalFile(“零号患者”)-->文件#001
  • changeStatus(“#001”)-->打开
  • 而期望的结果是:

  • 已为零号患者打开医疗文件#001

  • 我正在考虑使用日志语句检测Struts2操作,但我想知道。。。还有别的办法吗?我可能会再次使用AspectJ(或过滤器),并将逻辑保留在一个位置,以便轻松配置日志,但我担心一切都会变得更难理解(即“此操作的日志错误……我到底应该在哪里查找问题?”)。

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

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


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

    听起来您的客户机希望对系统中的用户操作进行审计跟踪

    请考虑在每个操作的入口点(从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”),而是稍后才确定。您不必重新评估审计数据。

    我在Struts2操作中也做过类似的更改,我使用了“log4j”“。根据您的应用程序服务器的不同,它可能有一个集成的日志记录系统,允许使用消息目录(例如:Weblogic)。

    事实上,我主要担心的一个问题是,将日志记录逻辑保留在一个位置需要传递会话和任何给定的参数集。。。后处理确实是一个有趣的选择!很高兴我能帮上忙。我在写作时有点犹豫,对Struts和AspectJ知之甚少或一无所知:-)我已经用一个多功能的类来保存许多不同记录之间的“差异”,并记录了医疗数据的日志版本;这是通过自定义稀疏代码完成的。尽管如此,我们的客户仍希望记录其他数据(即管理操作,如用户/组创建和更新)。