2013-05-20 1 views
0

나는 다음과 같은 여러 응용 프로그램에서 재생 파일 로거를 사용하고 있습니다 :디스크에있는 동일한 파일에 기록되는 Play Server 인스턴스를 여러 개 사용할 수 있습니까?

Class1.java 
private static ALogger logger = Logger.of("myAppLogger"); 
public void someMethodOfClass1() { 
logger.info("This is Class1"); 
} 

Class2.java 
private static ALogger logger = Logger.of("myAppLogger"); 
public void someMethodOfClass2() { 
logger.info("This is Class2"); 
} 

Class3.java 
Class4.java 

및 그래서 지금

에, 나는 플레이 서버 (또는 서버의 하나 개의 인스턴스와 new play.api.Application 하나 개의 인스턴스의 여러 인스턴스를 실행하는 경우 배치 스크립트를 실행) 한 대의 파일 로거에서 여러 서버 인스턴스를 사용하는 것이 좋고 권장 되는가?

답변

1

Play 프레임 워크는 Logback 로깅 프레임 워크를 사용합니다.

Logback의 File Appender 문서를 살펴 보시기 바랍니다. 설명서에 따르면 FileAppender은 기본적으로 false로 설정된 신중한 모드를 지원합니다.

신중한 모드에서

, FileAppender 안전하게 지정된 파일에 기록되며, 잠재적으로 다른 호스트에서 실행 다른의 JVM에서 실행중인 다른 FileAppender 인스턴스의 존재 . 신중한 모드의 기본값 인 은 false입니다.

는 그러나 같은 페이지가 경고 :

신중한 모드는 독점 파일 잠금을 사용합니다. 실험 결과에 따르면 파일은 로깅 이벤트를 기록하는 비용의 약 3 배 (x3)를 잠급니다. 로컬 하드 디스크에있는 파일에 "평균"PC 쓰기시, 신중한 모드가 해제되어 있으면 단일 로깅 이벤트를 작성하는 데 약 10 마이크로 초가 소요됩니다. 신중한 모드가 설정되면 단일 로깅 이벤트를 출력하려면 약 30 마이크로 초가 입니다. 이 은 신중한 모드가 해제되어 있고 신중한 모드에서 초당 약 33,000 회의 이벤트가 발생하면 초당 100,000 이벤트의 기록 처리량으로 변환됩니다.

신중한 모드가 해제되어있는 동안 여러 개의 jvm에서 로그하려고하면 어떤 일이 일어날 지 명확하지 않습니다.

1

각 Logger.of() 호출마다 slf4j LoggerFactory.getLogger (name)를 호출하므로 그렇게하는 것이 안전해야합니다.

관련 문제