2009-08-21 6 views
12

내가 작업하고있는 응용 프로그램에는 작업 로깅, 작업을 수행하는 사용자 및 데이터베이스 작업 시간이 필요합니다.로깅이 필요할 때 어떤 디자인 패턴을 고려합니까?

어떤 디자인 패턴이 로깅에 가장 적합합니까?

나는 을 생각하고 있습니다. 현재 사용자와 조치가 필요한 명령 패턴입니다. 작업을 수행하고 로그에 기록하십시오.

당신은 어떻게 생각하십니까? 내가 고려할 수있는 다른 대안들?

감사합니다.

답변

10

AOP을 사용하면 방해받지 않고 로깅을 적용 할 수 있습니다. AOP는 Proxy와 Decorator Pattern이 섞인 것처럼 느껴질 수 있습니다.

+0

그래, AOP는 확실히 옵션입니다. 나를 상기시켜 줘서 고마워. – Henry

+0

침입하는 행동없이 ... 내게 두드러진 단어. 백그라운드에서 발생해야하며 응용 프로그램은 로그가 기록되는 "시간"에 의존해서는 안됩니다. – Mukus

2

나는 동의한다. 나는 당신이 모든 행동을 나열 했으므로 명령 패턴이 가장 적합하다고 생각한다.

하지만이 디자인에 맞는 디자인 패턴을 따라야한다고 생각하지 않습니다. 단순히 작업을 콜백하여 로그를 업데이트 할 수 있습니다. 그것은 당신의 아키텍처와 기술에 달려 있지만 내 머리 속에서 명령 패턴은 지나치게 과장된 것처럼 들립니다.

+0

감사합니다. 간단한 콜백을 사용하는 것이 좋겠지 만 모든 작업에서 사용자를 인수로 사용하지 않는 한 응용 프로그램에서 '사용자'를 얻는 것이 어려울 것으로 보입니다. – Henry

1

명령 패턴이 정상적으로 들립니다. 특히 로거를 명령에 전달하고 명령이 로거에서 로그 작업을 수행하도록 할 수 있습니다. 이런 방식으로 각 작업에 로그 자체의 서식을 지정하고 일부 작업을 기록해서는 안되며 전체적인 아키텍처에서 알 필요가없는 특별한 정보가 필요한 경우 신경 써야합니다. 단점은 모든 액션에 추가해야하는 로그 문자열을 반환하는 메서드를 제공 할 수 있기를 원한다면 액션을 로거에 연결하는 것입니다.

만약 당신이 다른 행동을 많이한다면, 나는 이것이 과도하다고 생각하지 않는다. 데이터베이스 작업 일 뿐이며, 모든 데이터베이스 작업에서 데이터베이스 프레임 워크가 작업을 수행 할 수있다. 하나의 로깅 메커니즘이지만 marcgg가 지적한 바는 아키텍처에 달려있다.

4

명령과 로깅 메멘토을 통합하지 마십시오.

명령이 수행됩니다. 로그 항목 작성을 포함하여 모든 명령에서 공통적 인 측면을 포함 할 수 있습니다.

로그 항목 자체는 메멘토이거나 메멘토의 요약 일 수 있습니다.

로거는 기록 된 이벤트에 대한 유품를 생성 공장의 일종이다.

대부분의 경우와 마찬가지로 많은 수의 인터 로킹 디자인 패턴이 있습니다. 어떤 "하나의"패턴이 "가장 인기가 있거나/적절한"것이지 않습니다.

"무슨 일이 일어나야합니까?"

+5

참조 : "유품 패턴은 개체를 이전 상태로 복원 할 수있는 소프트웨어 디자인 패턴"http://en.wikipedia.org/wiki/Memento_pattern – marcgg

4

옵저버 패턴은 로깅 프레임 워크에 적합합니다. Logger 클래스를 Observable로 확장하고, log 클래스를 console, log, Database로 로깅, File 시스템에 로깅 등의 하위 클래스를 가질 수 있으며 각 하위 클래스는 Observer를 구현할 수 있습니다. 이제 로그 메시지가 기록 될 때마다 Logger 클래스에 등록 된 모든 관찰자 클래스에 알림이 전송되므로 콘솔에 대한 각 Child 클래스 ex : log는 메시지를 콘솔에 기록합니다. 또한 Logger 클래스는 단일 응용 프로그램을 통해 Logger의 단일 인스턴스를 사용할 수 있도록 Singleton 패턴을 따를 수 있습니다.

+0

몇 년 전에이 패턴을이 패턴으로 사용했습니다 ... 로깅은 여전히 ​​훌륭합니다. –

관련 문제