문제

그래서 여기 내 문제가 있습니다.
메시지 구동 Bean X가 있고 x의 onmessage () 메소드에서 로거를 사용하고 싶습니다. 내 앱 서버에서 Bean 인스턴스가 실행 중이므로 ejbcreate ()에서 log4j를 초기화합니다. 이것은 내가 다음과 같은 일을해야한다는 것을 의미합니다.

public void ejbCreate() {
    PropertyConfigurator.configure(Classloader.getResourceAsStream("xyz_log4j.properties"));
}

그러나 이것은 도움이되지 않습니다. 내가 무엇을하든 항상 스트림을 null로 얻으려면 다른 버전을 시도했습니다. this.getClass (). getStream () 및 resourceBundle.

나는 내 속성 파일을 test.jar에 넣고 귀 라이브러리 아래에 추가했으며 (rad7을 사용하고 있음) 내 manifest.mf에 반영되었습니다.

누구든지 전에이 문제에 직면 한 적이 있습니까? 그렇다면 어떻게 해결 했습니까? 당신의 도움을 주셔서 감사합니다...

도움이 되었습니까?

해결책

EJB Create 메소드에서 Log4J 구성을 권장하지는 않습니다. J2EE 사양에 따라 컨테이너 변덕에서 여러 Ejbeans를 활성화 / 통행 할 수 있습니다. 따라서 Log4J를 여러 번 구성 할 가능성이 있습니다. 1 회만 호출되는 신생 기업을 사용하는 것이 좋습니다.

다른 팁

항아리 파일 내부에서 이것을 얻는다면, 당신은 iniitial이 없습니다. /:

Classloader.getResourceAsStream("/xyz_log4j.properties")

또한 속성 파일이 포함 된 디렉토리에 따라 클래스 계층 구조의 상단과 관련하여 해당 디렉토리 경로를 지정해야합니다. 예를 들어이 속성 파일이 동일한 디렉토리에있는 경우 net.mine.Program, 당신은 이것을 할 것입니다 :

Classloader.getResourceAsStream("/net/mine/xyz_log4j.properties")

나는 당신이 Meta-Inf 디렉토리에서 읽을 수 있다고 생각하지 않습니다. getResourceAsStream(), 그러나 나는 결코 시도한 적이 없을 것입니다. 아마도 그것을 할 방법이있을 것입니다.

클래스 이름을 하중으로 하드 코딩 할 수 있습니다.

<name of your class>.class.getResourceAsStream(fileName);

또는 당신은 조사하고 싶을 수도 있습니다 SLF4J. Log4J 위에 앉을 수있는 외관입니다. API는 대부분 동일하며 (내가 믿는 동일한 제작자), SLF4J는 설명 초기화 호출이 필요하지 않으므로 조금 단순화합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top