2009-08-11 4 views
0

우리는 Apache 뒤에 두 개의 Tomcat 인스턴스 (mod_proxy_balancermod_proxy_ajp을 사용하는 Tomcat HA 설정)에서 실행되는 간단한 Webapp를 사용합니다. webapp의 역할은 들어오는 요청 데이터를 로그 파일에 기록하는 것입니다.HA Tomcat 파일 쓰기 솔루션이 필요합니다

각 tomcat 인스턴스가 자신의 JVM에서 실행되고 있다면 로그 파일 쓰기를 어떻게 구현해야합니까?

두 인스턴스가 같은 파일에 쓸 수 있으면 좋지만 Log4J에서는이를 지원하지 않는 것 같습니다. 우리는 우리 자신의 파일 작성자를 쓰는 것에 열렬하지만, 우리가 원하는 것을 java.nio.channels.FileLock이 할 것인지 확신 할 수 없습니다.

언더 패스는 ext3 파일 시스템을 사용하는 데비안이므로 우리가 C 또는 PHP로 이것을 수행한다면 파일 시스템 잠금을 사용하게됩니다. 그러나 Java는 기본 시스템을 추상화하기 위해 작성되었으며 여러 가지 패키지의 클래스가 혼란스러워서 모든 방식으로 파일을 쓸 수 있다고 주장했습니다. 누구라도 조언을하나요? 거기에 우리를 도울 수있는 패키지가 있습니까?

처음에는 2 개의 JVM에서 같은 파일에 쓰고 싶지 않은가? 확실히 나는 처음이 아니다.

또 다른 요구 사항은 이러한 파일을 매시간 롤업해야하지만 파일 작성시를 제외하고는 그다지 문제가되지 않습니다.

감사합니다.

답변

3

두 개 (또는 그 이상)의 로그 파일에 쓰기 만하면 롤아웃 한 후 결합하는 것이 훨씬 간단합니다.

둘 이상의 프로세스에서 하나의 파일에 쓰는 것은 모든 종류의 문제가 있습니다. 파일을 잠그는 것은 상당히 거칠고 중량이 큰 솔루션입니다.

대신 대기열 (JMS)에 로그 메시지를 쓰고 하나의 프로세스가 메시지를 읽고 단일 로그 파일에 기록하도록 할 수도 있습니다.

+0

그래, 내가 알기는하지만 논리가 한 곳에서 모두가 아니라는 것을 의미한다. –

+0

어떤 논리입니까? 로그 파일에 쓰고 있잖아, 그렇지? 아니면 그것에 더 있습니까? – cletus

+0

+1 대기열 아이디어에 대해, 파일 입출력이 웹 응용 프로그램이 응답하기 위해 대기하는 동안 모든 수신 요청을 기다릴 필요가 없습니다. –

관련 문제