2012-10-10 5 views
1

현재 내가 직면하고있는 수수께끼를 도와 줄 수 있기를 바랐다. 현재 요구 사항 중 하나가 중앙 집중화되어야하는 기존 웹 애플리케이션 프로젝트에서 현재 작업 중이다. 벌채 반출. 애플리케이션은 클라이언트 계층 (뷰), 서비스 계층, 비즈니스 계층 및 DAO 계층으로 구성된 계층화 된 애플리케이션입니다.Spring AOP를 이용한 로깅 집중화

현재 응용 프로그램의 로깅은 일부 정보가 기록되어야하는 각 컨트롤러 메서드가 로깅 기능을 호출하여 수동으로 데이터를 기록하는 컨트롤러 메서드에 의해 처리됩니다. 이러한 컨트롤러 메서드에 의해 처리되는 요청은 모바일 장치 (예 : 전화), 웹 브라우저, 웹 서비스 등 다양한 클라이언트 소스에서 가져옵니다. 현재 로깅해야하는 모든 데이터는 범용 개체로 캡처되어 이러한 등록 정보를 DB 테이블에 유지하기위한 로깅 메소드.

문제는이 범용 개체가 정확히 범용 개체라는 것입니다. 로깅, 검색 및 기타 많은 작업을 포함하여 많은 다른 작업에 사용됩니다. 이 범용 객체가 로깅에 사용될 때 몇 가지 속성을 제외하고 범용 객체를 채우는 데 사용되는 대부분의 속성 (로깅의 경우)은 요청 (즉, HttpServletRequest 객체)에서옵니다. . 이 객체의 다양성의 결과로,이 범용 객체가 오용 될 가능성이 있습니다. 따라서 우리는이 범용 객체를 없애고 특별한 작업을위한 특수 객체를 만들고 싶습니다. 로깅의 경우 로깅 객체를 생성하기로 결정했습니다. 로깅 객체는 로깅해야하는 데이터를 지속시킵니다. 우리는 스프링 AOP 로깅에게 영향을 사용하는 것입니다

수수께끼이다

1) 해야하는 이제부터는 AOP 조언을 사용하여 우리 기록 할 새로운 전문 로그 객체의 속성을 설정하는 컨트롤러를 사용하여 수 제어기 방법이

OR

2의 실행이 완료되면, 우리는 요구에 배치 한 특성을 이용하여 AOP 조언 새로운 로그 객체의 속성을 설정 함) 지속성 로그 객체를 검색 객체 (즉, HttpServletRe 퀘스트 개체)?

옵션 1의 문제점은 컨트롤러가 로깅을 인식하고 좋은 설계 원칙에 따라 컨트롤러가 작업을 비즈니스 및 서비스 계층에 위임하여 해당 작업을 수행하기로되어 있다는 것입니다. 옵션 1은 컨트롤러가 단순히 로그 작업을 위임하는 것 이상의 작업을 수행한다는 것을 의미합니다.

옵션 2의 문제점은 내 로깅 개체를 요청 개체 (즉, HttpServletRequest 개체)와 밀접하게 연결한다는 것입니다. 그 접근법으로 어떤 잠재력이 있는지 궁금해하고 있습니다.

어떤 종류의 제안, 조언 및 비평도 환영합니다. 또한 비슷한 상황을 처리해야하는 사람이 있다면 문제 해결 방법에 대해 듣고 싶습니다.

감사합니다.

답변

0

인터페이스로 표현 된 서비스 레이어에 로깅을 추가 할 수 있습니다.

HTTP 필터 또는 애스펙트를 사용하여 컨트롤러 레이어에서 로그 할 수 있습니다.

필요에 따라 여러 레이어에 AOP를 적용 할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 그게 아주 도움이.답변의 2 행에 대해 궁금한 점이 있습니다. 예를 들어 'HTTP 필터 또는 애스펙트를 사용하여 컨트롤러 레이어에서 로그 할 수 있습니다.' 애스펙트/어드바이스보다는 컨트롤러 메소드 자체에서 로그 객체의 속성을 설정하는 것이 좋습니다. 그렇다면 왜 HttpServletRequest 객체에서 로그 객체에 필요한 속성을 검색하고 advice/aspect에서 로그 객체의 속성을 설정하는 것보다 더 나은 접근법이 더 좋은가? – quophyie

+0

모든 컨트롤러에서 로그 속성을 설정하지 않았습니다. 애스펙트 또는 필터에 로거를 추가하기 만하면됩니다. log4j를 사용하므로 로거 속성이 완전히 외부화됩니다. – duffymo

+0

감사합니다. 결정을 내릴 때 도움이 될 것입니다. – quophyie

관련 문제