log4net을 사용하여 2 개의 응용 프로그램에서 동일한 로그 파일에 쓸 수 있습니까?log4net, 2 개의 응용 프로그램이 동일한 로그 파일에 쓸 수 있습니까?
답변
하나의 응용 프로그램이 파일을 쓰는 경우 첫 번째 응용 프로그램이 파일을 쓰기 위해 열어 두었 기 때문에 다른 응용 프로그램에서 로그에 쓸 필요가있을 때 오류가 발생할 가능성이 높습니다 . 응용 프로그램에 전용 로깅 소스를 갖는 것이 가장 좋습니다. 로그를 공유해야하는 경우 동시 작성을 처리하도록 설계된 데이터베이스를 사용하십시오.
이것은 로그 파일에 충분한 양의 쓰기를 작성하여 문제를 발견하지 못할 가능성이 있으므로 개발 중일 때 시스템에서 실제로 잘 작동하는 것 중 하나입니다. 응용 프로그램이 더 많은 부하를 받기 시작하면 문제는 스스로 표시되기 시작하고 그 시점에서 이상한 방식으로 나타날 수 있습니다. 나는 확실히 다른 해결책을 시도 할 것이다.
FileAppender의 LockingModel에 따라 다릅니다. ExclusiveLock이면 다른 프로세스가 파일을 쓰기 위해 열 수 없습니다. 대안은 MinimalLock이지만이 목적을위한 것이 아닙니다. 다른 프로세스가 파일을 이동하거나 삭제할 수 있도록하기위한 것입니다.
MinimalLock은 (@Mark에서 언급 한) 문제를 부분적으로 해결하지만 RollingFileAppender를 사용하는 경우 다른 문제가 발생합니다. 파일이 롤링되면 하나의 프로세스가 다른 프로세스의 새로 생성 된 로그 파일을 덮어 쓰는 경합 조건에 처할 수 있습니다.
다른 옵션에는 다른 프로세스에서 보낸 로깅 이벤트를 수신하고 기록하도록 설정된 간단한 서버가있는 RemoteLogger가 있습니다. 마찬가지로, SQL 데이터베이스에 로그 할 수 있습니다. Redis에 로그를 남기는 간단한 글을 썼습니다. Redis에서 읽고 파일에 기록하는 간단한 응용 프로그램이 필요합니다. 이러한 접근 방식의 문제점은 모두 장애 지점을 초래한다는 것입니다. 무언가가 올바르게 작동하지 않을 때 로그가 가장 필요할 때가 종종 있습니다. 그런 다음 로그가 사용 가능하지 않을 수 있습니다.
그래서 내 솔루션은 각 프로세스가 자체 파일에 로그를 남김으로써 문제를 피하는 것이 었습니다. 이는 구성 변경으로 인해 쉽게 이루어졌습니다. 당신의 (Rolling)FileAppender
구성에서 사용
<file type="log4net.Util.PatternString" value="c:\mylog-[%processid].txt" />
프로세스 ID가 파일 이름의 일부가됩니다. 예. 이제 여러 개의 로그 파일이 만들어 지지만 Graylog, Splunk 또는 Logscape와 같은 로그 파일 수집기가 도움이 될 수 있습니다.
또는 뮤텍스를 사용하여 공통 리소스를 잠그고 다른 프로세스의 공통 로그 파일에 대한 액세스를 동기화 할 수 있습니다.
예, 위에서 언급 한 것처럼 가능하지만 지금은이 시나리오의 스트레스 테스트를 수행했습니다.
셋업은 매우 간단하다 URL에서 카운터와 단일 항목 + 같은 페이지 1000 개 요청을 설정하는 버튼 을 기록 페이지로 설정
- 웹 프로젝트 (1) (logging 문에 의해 선택).
- 웹 프로젝트 2가 동일한 로그 파일과 동일하게 설정되었습니다.
두 단추를 동시에 클릭하면 로그 항목이 로그 전체에 산재 해 있습니다. 하지만 이것은 큰 GOTCHA입니다. 동반 요청 카운터로 판단하면 경쟁 조건이 있음이 분명합니다. 거의 모든 웹 프로젝트가 해당 항목을 로깅하는 데 성공하면 다른 하나는 실패합니다 (항목을 건너 뜁니다).
따라서이 일반 로그에 대한 트래픽이 양호하면 기본적으로 로그에 실제로 끝나는 로그 문을 보장 할 수 없습니다. 결론은 항상 프로젝트 별 로그 파일을 갖는 것입니다.
테스트는 기본값 "MinimalLock"으로 수행되었습니다. "ExclusiveLock"으로 테스트를 재실행하여, 기본적으로 로거를 구성하는 첫 번째 웹 프로젝트가 "won"인지 확인합니다. 기본적으로 다른 모든 로깅 요청은 잠그지 않습니다. 분명히, 그것은 물론입니다.
- 1. 동일한 html 파일에 2 html 코드를 쓸 수 있습니까?
- 2. 어디에서 Log4net 로그 파일을 ClickOnce 아래에 쓸 수 있습니까?
- 3. 파이썬 CGI에서 Lighttpd 로그 파일에 쓸 수 있습니까?
- 4. 프로그래밍 방식으로 두 개의 개별 파일에 동일한 메시지를 작성하도록 log4net 구성
- 5. Log4Net 로그 파일을 자동으로 삭제할 수 있습니까?
- 6. 파일에 쓸 수 없습니다
- 7. 어떻게 이전 log4net 로그 파일을 삭제할 수 있습니까?
- 8. log4net .... 별도의 로그 파일
- 9. 1 개의 웹 응용 프로그램이 2 개의 IIS 사이트에서 공유합니까?
- 10. 텍스트 파일에 쓸 수 없습니다.
- 11. PHP로 파일에 쓸 수 없음
- 12. 해시 테이블을 파일에 쓸 수 있습니까?
- 13. .js 파일에 ASP 코드를 쓸 수 있습니까?
- 14. .htacces 파일에 PHP 코드를 쓸 수 있습니까?
- 15. 어떻게하면 이클립스에서 파일에 쓸 수 있습니까?
- 16. 다른 방법으로 같은 파일에 쓸 수 있습니까?
- 17. 자바 스크립트를 사용하여 파일에 쓸 수 있습니까?
- 18. 동일한 프로세서에 2 개의 스핀 록이 있습니까?
- 19. 동일한 logging.properties 파일에 두 개의 FileHandler를 설정할 수 있습니까?
- 20. Unittest에서 하나의 파일에 2 개의 테스트 클래스를 가질 수 있습니까?
- 21. log4net : 동일한 appender 구성으로 둘 이상의 로그 수준 사용
- 22. 2 개의 CSS 클래스가 동일한 스크립트를 활성화 할 수 있습니까?
- 23. 2 개의 객체가 동일한 키 이름을 가질 수 있습니까?
- 24. 동일한 파일을 2 개의 SVN 리포지토리에 커밋 할 수 있습니까?
- 25. 동일한 솔루션에서 2 개의 빌드 템플릿을 컴파일 할 수 있습니까?
- 26. 로그 수준에 따라 다른 파일에 기록하도록 log4net 구성
- 27. 동일한 텍스트 파일에 여러 개의 DLL을 쓰고 있습니까?
- 28. 파일에 log4net 쓰기. 권한을 여는 방법
- 29. 동일한 웹 응용 프로그램에서 2 개의 .NET 언어 호스팅을위한 전략
- 30. iPhone에 배포 할 때 2 개의 iPhone 응용 프로그램이 망가졌습니다.
누구나이 방법에 대해 공유 할 경험이 있습니까? – SandRock