2016-07-07 3 views
1

Log4j 1.2에서는 단순히 Logger를 사용하고 런타임에 appender를 추가 할 수 있습니다. 이것은 예를 들어 테스트 목적으로 유용했습니다. 우리는 mock appender를 생성하여 logger에 추가했습니다. 그 결과 우리는 서로 다른 주장을 할 수있었습니다.Log4j2의 Logger에 appender를 추가하는 방법

log4j2와 동일한 것은 무엇입니까?

예를 들어 example은 다른 사람들이 테스트 appender를 추가하는 방법을 보여줍니다.

log4j2 페이지는 추가 기능을 추가하는 방법에 대한 몇 가지 예를 보여줍니다. 그러나 이들은 전반적인 상황에 어 펜더를 추가합니다. 하나의 특정 로거에 대한 애펜더를 추가하는 것과는 다른 것으로 보입니다.

또 다른 관찰은 org.apache.logging.log4j.Logger와는 반대로 org.apache.logging.log4j.core.Logger를 사용하면 여전히 appender를 추가 할 수 있다는 것입니다. 그러나 대부분의 사람들은 org.apache.logging.log4j.Logger를 사용합니다. 실제로 LogManager는 org.apache.logging.log4j.Logger의 인스턴스를 반환합니다. 따라서이 두 클래스를 연결하는 방법과 연결해야하는지 확실하지 않습니다.

또 다른 관찰은 내가

 LogManager.getContext().getConfiguration().getLoggers() 

를 호출하면 내가 맥락에서 모든 LoggerConfig 개체의 표준시를 얻을 수 있다는 것입니다. 이후에 LoggerConfig 객체에 애펜더를 추가합니다. 그러나 문제는 org.apache.logging.log4j.Logger의 인스턴스와 관련된 LoggerConfig를 얻는 방법입니다.

이것은 혼란 스럽습니다.

답변

3

org.apache.logging.log4j.Logger은 log4j-api 모듈에있는 인터페이스입니다. org.apache.logging.log4j.core.Logger은 log4j-core 모듈에있는 구체적인 클래스입니다 (위의 인터페이스 구현).

logManager (log4j-api 모듈에도 있음)는 org.apache.logging.log4j.Logger 인터페이스를 구현하는 것을 반환하고 log4j-core 모듈이 classpath에 있으면 org.apache.logging.log4j.core.Logger의 인스턴스가됩니다.

따라서 반환 된 로거를 org.apache.logging.log4j.core.Logger으로 전송하고 Appender를 추가 할 수 있습니다.

각 코어 로거에는 LoggerConfig (일대일 관계)가 있습니다. LoggerConfig는 이름이 같기 때문에 원하는 Logger에 해당하는 LoggerConfig를 찾을 수 있습니다.

+0

감사합니다. 그랬어. – Klaus

+0

추가되는 appender에 대한 로그 수준을 어떻게 설정할 수 있습니까? – JimN