2009-11-13 5 views
8

여러 파일을 동시에 실행하여 동일한 파일에 기록하려고합니다.Enterprise 라이브러리를 사용하여 여러 프로세스에서 동일한 파일로 로깅 4.1

우리는 엔터프라이즈 라이브러리 4.1 로깅 응용 프로그램 블록 (RollingFlatFileTraceListener)을 사용하고 있으며, 두 프로세스가 다음 위치에서 로그 파일에 쓸 때 로그 파일 이름에 GUID를 추가한다는 점만 제외하면 정상적으로 작동합니다. 같은 시간 (내가 믿는 System.Diagnostics.TextWriterTraceListener의 버릇).

로그 파일에 기록한 후에 Logger.Writer.Dispose()을 호출하는 것을 포함하여 여러 가지를 시도했지만 로그 항목이 기록 될 때마다 차단 호출을하는 것은 이상하지 않습니다.

EntLib 포럼에서는 배포자 서비스와 함께 MSMQ를 사용하는 것이 좋지만 MSMQ는 회사에서 허용되지 않으므로 옵션이 아닙니다.

여러 스레드/프로세스에서 동일한 파일로 쉽고 빠르게 로그 할 수있는 또 다른 방법이 있습니까?

+0

대체 솔루션을 얻었습니까? 어쩌면 *** MSMQ ***을 사용하고 있습니까? – Kiquenet

+0

@Kiquenet 오랜 시간이 지났습니다. 기억이 없습니다. 만약 내가 열심히 노력한다면, 우리는이 문제를 해결하기 위해 서로 다른 프로세스에 대해 서로 다른 로그 파일을 사용하는 것을 기억하고 있습니다. 이상적은 아니지만 일을 단순하게 유지하고 싶었습니다. – Riko

+0

지금 로깅 프레임 워크를 선택해야한다면 Enterprise Library에서 가능한 한 멀리 떨어져 있어야합니다. 그것은 사용하기 쉽고 구성하기가 너무 복잡하며 쉽게 확장 할 수 없습니다. 나는 아마도 [log4net] (https://logging.apache.org/log4net/) 또는 [NLog] (http://nlog-project.org/)로 갈 것이다. – Riko

답변

4

죄송하지만 대답은 '아니오'입니다. File TraceListener는 하나의 TraceListener 만 파일에 로깅 할 수 있도록 출력 파일을 잠급니다.

파일 기반이 아닌 다른 추적 수신기 (예 : 데이터베이스, 이벤트 로그)를 사용해 볼 수 있습니다.

내가 생각할 수있는 또 다른 옵션은 파일에 로그온하고 LogEntries를 허용하는 자체 로깅 서비스를 작성하는 것입니다. 그런 다음 서비스에 메시지를 보내는 사용자 지정 추적 수신기를 만듭니다.

약간의 사용자 지정 개발과 프로세스 외부 호출이므로 성능에 영향을 줄 수 있으므로 좋은 생각이 아닐 수도 있습니다. 기본적으로 자신 만의 단순 의사 배포자 서비스를 설정하고 있습니다.

+0

이것은 우리가 얻은 결론과 똑같습니다. 장기적으로 우리는 로깅을위한 단순한 화재 및 잊어 버린 WCF 서비스를 작성하게 될 것입니다. 이것은 유일한 다른 실행 가능한 옵션입니다. 불쌍하지만. – Riko

2

EntLib은 로그 파일에 쓸 때 로그 파일을 잠급니다. 따라서 2 개의 프로세스가 동일한 로그 파일에 쓸 수 없습니다.

우리가이 문제를 겪었을 때, 우리는 많은 차이점에서 같은 장소로 로그 할 필요가있었습니다. 우리는 데이터베이스 로깅을 사용했습니다.

텍스트 파일에 100 % 고정 된 경우 개별 로그 파일에 기록한 다음이 파일을 병합하는 프로그램을 작성할 수 있습니다.

+0

동일한 프로세스에서 2 개의 별도의 추적 수신기도 동일한 파일에 기록 할 수 없습니다. –

+0

네, 데이터베이스 로깅 옵션이 없기 때문에 데이터베이스 로깅이 없습니다.잠시 동안 우리는 함께 병합하는 개별 로그 파일을 사용하고 있습니다. 하지만 이는 단기적인 해결 방법 일뿐입니다. – Riko

1

나는 이것이 오래되었음을 알고 있지만, 여전히 궁금하다면. log4net은 다음을 지원합니다.

+1

감사합니다. 이 프로젝트에서 log4net을 사용하는 것은 옵션이 아닙니다. 그것은 내 결정 엔 분명히 EntLib 통해 그것을 사용하지만, EntLib 로깅 너무 비대하고 이해하기 힘든 방법입니다. – Riko

0

이 문제는 응용 프로그램 풀이 오버랩 된 스레드를 재생할 때 발생합니다. 닫는 스레드가 여전히 열리고 새 스레드가 오류를 가져옵니다. IIS에서 중복되는 재활용 동작을 비활성화하거나 텍스트 작성기 버전을 직접 만들어보십시오.

관련 문제