java - 记录用户操作

标签 java struts logging aspectj

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

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

而期望的结果是:

  1. 打开了零号病人的医疗文件 #001

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

最佳答案

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

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

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

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

这里重要的是保存所有用户操作,无论成功或失败。此外,客户确实需要了解所有相关信息以及操作。

由于我们正在记录操作常量和数据,因此可以单独编码向客户展示审计。您也获得了灵 active ,因为表示字符串的更改(例如,“为零号患者打开医疗文件 #001”到“打开零号患者 #001 医疗文件”)不是在操作时确定的,而是在以后确定的。你不不必重新处理审计数据。

关于java - 记录用户操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/391269/

相关文章:

java - 在 Java 中验证 KeyStore 密码

java - 如何在 struts1 标签库中强制使用 utf8?

java - JSP - 保存集合

qt - 如何使用 QPlaintTextEdit 有效地创建固定宽度的列记录器?

java - 为什么使用 BufferedReader 和 CharBuffer 时最后一次读取会附加额外的字符?

java - 在 Java 6 中模拟 try-with-resources 的最佳方法是什么?

java - 如何检查是否加载了 log4j.properties?

logging - dmesg 和/var/log/kern.log 之间的区别

java - Android java.util.HashMap 无法转换为 java.lang.String

java - 从一对多集合中删除元素(Java + HIbernate + Struts)