Grails 앱 실행 중에 액세스 한 MY 클래스를 모니터링하고 싶습니다. 이 목적을 위해 나는 모든 커스텀 클래스에 '이전의 메소드 호출'에 로깅을 추가 한 다음 로그 파일을 검사 할 생각이다. 기존 클래스를 수정하지 않고 이러한 인터셉터 로직을 추가하는 가장 슬픈 방법은 무엇입니까?Grails에서 모든 맞춤 클래스 차단하기
메타 프로그래밍/AOP?
Grails 앱 실행 중에 액세스 한 MY 클래스를 모니터링하고 싶습니다. 이 목적을 위해 나는 모든 커스텀 클래스에 '이전의 메소드 호출'에 로깅을 추가 한 다음 로그 파일을 검사 할 생각이다. 기존 클래스를 수정하지 않고 이러한 인터셉터 로직을 추가하는 가장 슬픈 방법은 무엇입니까?Grails에서 모든 맞춤 클래스 차단하기
메타 프로그래밍/AOP?
스프링 AOP를 사용하십시오.
, 당신이 원하는 클래스에있는 모든 방법을 차단 resources.groovy에 빈 선언이를 추가하려면xmlns aop: "http://www.springframework.org/schema/aop" //[1]
aop {
config {
pointcut(id: "interceptorPointcut", expression: "execution(* my.basepkg..*(..))") //[2]
advisor('pointcut-ref': "interceptorPointcut", 'advice-ref': "myInterceptor") //[3]
}
}
myInterceptor(org.springframework.aop.interceptor.SimpleTraceInterceptor) { //[4]
loggerName = "myTracer"
}
[1] 스프링 AOP가 빈에서 사용하기위한의 네임 스페이스와 스키마에 제공 작성자
[2] 메소드 서명 패턴. 이 사람은 my.basepkg에서 모든 클래스의 모든 방법과 일치하거나 인터셉터의 메시지를 기록하는 데 사용됩니다 최우선 loggerName와 함께
[3] 바인딩 포인트 컷과 조언
[4] 조언 빈 선언을 서브 패키지됩니다. 이 같은 Config.groovy 파일 뭔가에 추가
appenders {
rollingFile maxBackupIndex: 5, maxFileSize: '100KB', name: 'fileTracer', file: 'methodtrace.log', layout: pattern(conversionPattern: "%m%n")
}
trace additivity: false, fileTracer: 'myTracer'
SimpleInterceptor 모든 방법에 메시지/종료/예외를 입력 로그 표준 Spring의 인터셉터입니다. org.springframework.aop.interceptor 패키지의 다른 패키지 나 패키지를 사용할 수도 있고 직접 작성할 수도 있습니다 (간단히 AbstractTraceInterceptor를 확장하십시오).
죄송합니다. 직접 답변을 드려야 만했지만이 질문에 상당히 흥미가있었습니다. – avgvstvs
groovy [invokeMethod 및 getProperty] (http://groovy.codehaus.org/Using+invokeMethod+and+getProperty) 기능을 사용하는 것이 좋습니다. –
아마도 관련이 있습니다 : http://stackoverflow.com/q/10956841/6509 –
@ Fabiano 그러나 이것은 기존 코드를 수정 (구현/재정의)하는 것을 의미합니다. 나는 논리가 외부화되고 모든 수업에 한 번에 묶이기를 원합니다. – fizmax