【问题标题】:Logging user actions记录用户操作
【发布时间】:2008-12-24 11:19:08
【问题描述】:

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

  1. closePreviousFiles("零号病人")
  2. createMedicalFile("患者零") --> 文件 #001
  3. changeStatus("#001") --> 打开

而期望的结果是:

  1. 为患者 0 打开了 #001 医疗文件

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

【问题讨论】:

    标签: java struts logging aspectj


    【解决方案1】:

    听起来您的客户想要对用户在系统中的操作进行审计跟踪。

    考虑在每个操作的入口点(来自网络请求)以操作上的枚举/常量开始审计条目。如果可能,用用户提供的信息填充它。

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

    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 医疗文件打开)不是在操作时确定的,而是在以后确定的。你不'不必重新整理审计数据。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 事实上,我主要担心的一个问题是,将日志记录逻辑保存在一个地方需要传递会话和任何给定的参数集......后处理确实是一个有趣的选择!跨度>
      • 很高兴我能有用。我对写作有点犹豫,对 Struts 和 AspectJ 知之甚少或一无所知 :-)
      【解决方案3】:

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

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

      【讨论】:

      • 我已经做了医疗数据的日志版本,有一个通用的类可以保存许多不同记录之间的“差异”;这是通过自定义稀疏代码完成的。尽管如此,我们的客户仍希望记录其他数据(即管理操作,例如用户/组的创建和更新)。
      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2021-12-23
        • 2015-08-27
        • 2017-02-07
        • 2012-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多