2011-04-20 5 views
0

우리는 몇 가지 응용 프로그램으로 구성된 시스템을 가지고 있습니다. 특정 지점의 각 응용 프로그램은 이벤트 로그 중 하나에 이벤트를 생성해야합니다. (이벤트 로그는 이벤트 로그 번호, 이벤트 유형 등을 정의하는 속성이있는 데이터베이스의 테이블입니다.) 모든 이벤트 로그에는 특정 공통 속성이 있지만 모든 로그에는 특정 속성이 있습니다 (따라서 스파 스 테이블이 있음). 모든 이벤트 로그는 자체 이벤트 세트를 지원합니다. 이 이벤트는 기록 할 추가 필드를 지정합니다. 응용 프로그램은 특정 실행 지점에서 생성해야하는 이벤트 로그 번호 및 이벤트 유형을 알고 있습니다.다양한 이벤트 로그에 쓰기위한 디자인 패턴

나는 이것을 달성하는 데 도움이되는 디자인 패턴을 찾고 있습니다. 응용 프로그램에서 사용할 수있는 라이브러리를 작성해야하므로 각 개발자는 이벤트 데이터를 삽입하기 위해 사용하기 쉬운 클래스를 갖게됩니다. "코드 수준"에서 말하자면, 클라이언트 코드를 생성해야하는 이벤트에 특정한 서명을 사용하여 단일 메서드를 호출하도록 줄이려고합니다. 지금까지 나는 10 개의 메소드 (10 개의 이벤트 로그)를 가진 Factory (아마도 Singleton이 될 가능성이 높습니다)를 생각해 냈습니다. 각 메소드는 db에 데이터를 쓰는 메소드를 제공하는 적절한 클래스 (예 : EventLog1Entry)를 생성합니다.
추가 작업 무엇을해야할지 모르겠다. 제안 사항이 있으십니까?

P. 이것은 디자인 패턴을 사용하려는 첫 번째 시도이기 때문에 전문 용어를 너무 자유롭게 사용하면 나를 용서할 수 있습니다.

+0

옵저버 패턴. –

+0

옵서버는 수 대 다수 (예 : 몇 개의 이벤트 로그를 보유할지, 어떤 이벤트 로그를 구독할지 알 수 없음)에 적합합니다. 여기서 우리는 여러 가지가 있습니다. 그래서 이것이 가장 적합한 패턴이라고 생각하지 않습니다. –

+0

고맙습니다. – Nickolodeon

답변

0

log4net을 확인해보십시오. 원하는 모든 것을 이미 지원할뿐만 아니라 고도로 최적화되고 광범위하게 테스트됩니다.

"그대로"사용하고 싶지 않더라도 몇 년 동안 설계가 입증 된 몇 가지 지침을 제공 할 수 있습니다.

+0

이것은 설계 구조 측면에서 게시 된 문제에 대한 답변이 아니지만이 링크가 유용 할 수 있습니다. – Nickolodeon

+0

메시지 문자열 외에 log4net을 사용하여 다른 필드를 삽입 할 수있는 가능성이 없습니다. 우리는 시스템 특정 필드를 db로 가지고 있습니다. 내가 놓친 게 있니? – Nickolodeon

+0

네, 당신은 :)'log.Warn (새로운 MsgObj (42, "너무 오래 그리고 모든 물고기에게 감사합니다));'예제 솔루션에서 - 당신은 어떤 객체를 기록 할 수 있습니다. 그러면 당신의 커스텀 appender는 다른 필요한 경우 개체. SQL에 쓰는 것도 물론 지원됩니다. –