2014-06-16 5 views
7

audit-logging 플러그인을 내 응용 프로그램에 설치했습니다. Grails 버전은 2.1.1이고 플러그인 버전은 1.0.1입니다. 내 Config.groovy 클래스에서audit-logging plugin을 사용하여 grails에 두 개의 레코드가 삽입되었습니다.

,이

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") 
    } 

에서 상태 값을 변경하는 경우 는 통화 당 두 개의 레코드를 삽입합니다.

+2

나는'actorClosure' (shiro를 사용하지 않았다.)없이 같은 것을 테스트했고 나는이 동작을 보지 못했다. Shiro를 사용하여 문제를 복제하는 github에서 샘플 앱을 공유 할 수 있습니까? 컨트롤러에 사용자 지정 식별자를 사용했는데 어디서나 매핑 된 도메인 클래스에는 표시되지 않습니다. – dmahapatro

답변

1

여기에도이 동작이 표시되지 않았습니다. 많은 프로젝트에서이 플러그인 사용. verbose = false로 설정하고 다시 테스트 해 주시겠습니까? 문제가 발생하면 이벤트가 한 번만 발사 될 수 있음을 의미합니다.

작은 testapp는 좋을 것입니다.

BTW : plugins 프로젝트에 테스트 애플리케이션 (감사 테스트)이 포함 된 spock 테스트를 사용하여 audit_log 테이블에 저장되는 이벤트 수를 확인합니다. 따라서 나는 귀하의 응용 프로그램에서 가장자리 사건이나 특정 문제가 있다고 가정합니다.

+1

verbose = false를 수행했지만 아무 일도 없었습니다. :(. 디버거를 실행하고 플러그인 함수 getActor() 중 하나에서 중단 포인터를 표시 할 때.이 함수는 요청 당 세 번 호출합니다. 내 응용 프로그램에서이 문제가 아니라이 문제를 보지 못했습니다. –

+0

후속 조치 의견 JIRA 티켓 GPAUDITLOGGING-64 – Bertl

2

내가 문제를 발견

@Bertl, 나는 생각한다, 문제는 플러그인입니다. 내 응용 프로그램은 하나는 기본 데이터베이스이고 다른 두 개는 다른 목적을위한 세 개의 데이터베이스를 사용합니다. 내 databource는 다음과 같습니다.

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를 삽입합니다. 3 개의 데이터 소스를 사용할 때와 마찬가지로 3 개의 레코드를 감사 로깅에 삽입합니다. 세 가지 데이터베이스가 모두 필요하지만 문제가 발생합니다. 이제 어떻게해야합니까?