客户希望我们“记录”用户在我们的系统上执行的“操作”:主要是创建、删除和更新。我已经有了一个记录跟踪的方面,但是它可以在一个非常低级别的日志记录每个方法调用。因此,如果用户单击“打开医疗文件”按钮,日志将读取:
所期望的结果是:
打开了#001医疗文件
我正在考虑用日志语句来检测Struts2操作,但我想知道.还有别的办法吗?我可能会再次使用AspectJ (或过滤器),并将逻辑保留在一个地方,这样我就可以轻松地配置日志,但是恐怕所有事情都会变得更难理解(例如,“这个操作的日志是错误的……我应该在哪里寻找麻烦?”)
发布于 2008-12-24 07:28:21
听起来你的客户想要对系统中用户的行为进行审计跟踪。
请考虑在每个操作的入口点(从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”到“打开的病人0 #001医疗文件”并不是在操作时确定的,而是稍后确定的。您不必重新按摩审核数据。
发布于 2008-12-24 03:26:38
我最近对日志进行了后处理,以生成摘要。您可能需要考虑这种方法,特别是如果上述日志中的#2和#3是在不同的地方生成的,并且所需的结果需要从一个地方传递到另一个地方。
发布于 2008-12-24 05:30:37
如果您正在处理医疗数据,您可能需要同时考虑日志记录和版本控制。我甚至会考虑用数据库触发器来做这件事。我不做太多的Java编程,但我已经和我们的学生信息系统团队讨论了这个问题。它们在后端使用Oracle,并在它们的连接中注册会话变量。它们的触发器使用此会话变量创建关键表的日志条目和版本历史记录(在更新/删除时)。这提供了审计和回滚功能。我认为这两种方法都适用于医疗记录的应用。
他们还使用log4j进行应用程序级别的日志记录,但是数据日志记录是在数据库中进行的。
https://stackoverflow.com/questions/391269
复制相似问题