7

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テーブルでは、1 つの操作に対して二重のレコードが挿入されました。たとえば、コントローラー クラスからステータス値を変更した場合

def stopSurvey(Long id) {
        def survey = Survey.findById(params['stop'])
        survey.status = Survey.NO_RUNNING_SURVERY


        redirect(action: "list")
    } 

呼び出しごとに 2 つのレコードを挿入します。

4

2 に答える 2

2

@ベルトル

問題が見つかりました。問題はプラグインにあると思います。私のアプリケーションは 3 つのデータベースを使用します。1 つはメイン データベースで、残りの 2 つは他の目的のためのものです。私の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、1 つのレコードが挿入されます。2 つのデータソースを使用すると、audit loggingテーブルに 2 つのレコードが挿入されます。3 つのデータソースを使用する場合と同じように、監査ログに 3 つのレコードを挿入します。3 つのデータベースすべてが必要ですが、問題が発生します。私は今どうすればいい?

于 2014-07-04T06:59:23.013 に答える
1

ここでもこの動作は見られませんでした。多くのプロジェクトでこのプラグインを使用しています。verbose=false に設定して、もう一度テストしていただけますか? 問題が発生した場合も、イベントが 1 回だけではなく発生する可能性があることを意味します。

小さなtestappは素晴らしいでしょう。

ところで: プラグイン プロジェクトに含まれるテスト アプリケーション (audit-test) でスポック テストを使用して、audit_log テーブルに保存されているイベントの数を確認します。したがって、エッジケースまたはアプリの特定の問題を想定しています。

于 2014-07-02T11:36:15.787 に答える