Вопрос

Итак, вот моя проблема:
У меня есть bean-компонент X, управляемый сообщениями, и я хотел бы использовать Logger в методе X onMessage().Предположим, что у меня есть единственный экземпляр bean-компонента, работающий на моем сервере приложений, поэтому я бы инициализировал log4j в ejbCreate().Это означало бы, что мне придется сделать что-то вроде этого:

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

Однако это не помогает.Что бы я ни делал, мой поток всегда имеет значение null, я пробовал другие версии:this.getClass().getStream() и ResourceBundle.

Я поместил свой файл свойств в test.jar и добавил его в библиотеки EAR (я использую RAD7), и это отразилось в моем манифесте.mf.

Кто-нибудь сталкивался с этой проблемой раньше?Если да, то как вы это решили?Ценю вашу помощь...

Это было полезно?

Решение

Я бы не рекомендовал настраивать log4j в методе создания EJB.Несколько EJBeans могут быть активированы/пассивированы по желанию контейнеров в соответствии со спецификацией J2EE.Таким образом, есть вероятность, что вам придется настроить log4j несколько раз.Рекомендуется использовать bean-компоненты запуска, которые гарантированно будут вызываться только 1 раз.

Другие советы

Если вы получаете это из файла JAR, значит, вам не хватает начального файла. /:

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