我已将audit-logging
插件安装到我的应用程序中。 grails版本为2.1.1
,插件版本为1.0.1
。
在我的Config.groovy
课程中,我添加了这个
auditLog {
verbose = true // verbosely log all changed values to db
logIds = true // log db-ids of associated objects.
// Note: if you change next 2 properties, you must update your database schema!
tablename = 'audit_logs' // table name for audit logs.
transactional = false
actorClosure = { request, session ->
org.apache.shiro.SecurityUtils.getSubject()?.getPrincipal()
}
在我的域类中我添加了这个
class Survey {
static auditable = true
static final int NO_RUNNING_SURVERY = 0
static final int RUNNING_SURVERY = 1
static final int CALL_NO_Record_SURVEY = 0
static final int CALL_Record_SURVEY = 1
static final int REALTIME_SURVEY = 0
static final int HISTORICAL_SURVEY = 1
static final int STANDARD_SURVERY = 2
String name
String description
int status
}
当我添加,删除和更新某些内容时。
在我的audit_logs
表中,针对一个操作插入了双重记录,例如
如果我从控制器类更改状态值
def stopSurvey(Long id) {
def survey = Survey.findById(params['stop'])
survey.status = Survey.NO_RUNNING_SURVERY
redirect(action: "list")
}
每次调用都会插入两条记录。
答案 0 :(得分:2)
@Bertl
我发现问题,我认为,问题出在插件中。我的应用程序使用三个数据库,一个是主数据库,另外两个用于其他目的。我的databSource如下。
dataSource.driverClassName = net.sourceforge.jtds.jdbcx.JtdsDataSource
dataSource.dbCreate = update
dataSource.url = jdbc:jtds:sqlserver://localhost:1433/test
dataSource.username = test
dataSource.password = 123
#TEST1
dataSource_TEST1.driverClassName = net.sourceforge.jtds.jdbcx.JtdsDataSource
dataSource_TEST1.readOnly = true
dataSource_TEST1.url = jdbc:jtds:sqlserver://xxx.xxx.xxx.xxx:1433/test1
dataSource_TEST1.username = test1
dataSource_TEST1.password = 123
# TEST2
dataSource_TEST2.driverClassName = net.sourceforge.jtds.jdbcx.JtdsDataSource
dataSource_TEST2.readOnly = true
dataSource_TEST2.url = jdbc:jtds:sqlserver://xxx.xxx.xxxx.xxx:1433/test2
dataSource_TEST2.username = test2
dataSource_TEST2.password = 123
当我只使用test
数据源并删除其他dataSources
时,它会插入一条记录。当我使用两个数据源时,它会在audit logging
表中插入两个reocrd。
与使用三个数据源时相同,然后在审计日志记录中插入三条记录。
我需要所有三个数据库,但它会产生问题。我现在该怎么办?
答案 1 :(得分:1)
这里也没有看到这种行为。在许多项目中使用此插件。你可以设置verbose = false并再次测试吗?如果问题发生,那也意味着事件可能不仅被触发一次。
一个小的testapp会很棒。
BTW:我们在包含测试应用程序(审计测试)的插件项目中使用spock测试来检查audit_log表中存储了多少事件。因此,我假设您的应用中存在边缘情况或特定问题。