|
|
|
Tomcat classloader: как его забороть?
|
|||
|---|---|---|---|
|
#18+
Поясните вкратце как работает класслоадер в томкате? На Jboss-е привык, что он иерархический, соответственно, приложения могут включать одни и те же библиотеки, разных версий, и конфликт не возникает. На томкате задеплоил 2 приложения, в которых включен log4j (1.2.x) и получил конфликт. Ну и всякие удивительные вещи, если в этих приложениях аппендеры с одинаковыми именами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2017, 11:50 |
|
||
|
Tomcat classloader: как его забороть?
|
|||
|---|---|---|---|
|
#18+
ivanra, а размещение всего и вся в одном месте где приложение, а не либы сервера не помогает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2017, 12:08 |
|
||
|
Tomcat classloader: как его забороть?
|
|||
|---|---|---|---|
|
#18+
ivanra, https://wiki.apache.org/tomcat/FAQ/Logging#Q5 How should I log in my own webapps? While you can use System.out and System.err to log, we strongly recommend using a toolkit like Log4J or JDK 1.4's java.util.logging package. With these toolkits, you have significantly more functionality. For example, sending emails, logging to a database, controlling at runtime the logging level of different classes, inspecting the logs with a graphical viewer, etc. We also recommend that you separate your logging from Tomcat's internal logging. That means you should bundle your logging toolkit with your webapp. If you are using Log4J, for example, place the Log4J jar in the WEB-INF/lib directory of your webapp and the Log4J configuration file in the WEB-INF/classes directory of your webapp . This way different web applications can have different logging configurations and you don't need to worry about them interfering with each other. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2017, 12:11 |
|
||
|
Tomcat classloader: как его забороть?
|
|||
|---|---|---|---|
|
#18+
Usman, Тоже думал, что так можно, а оказывается нет. Если включаю log4j в оба приложения, одно из них загружается, а во втором ошибка: Код: powershell 1. 2. 3. 4. 5. ну а если кладу log4j в lib, а в приложениях указываю <scope>provided</scope> то происходит интерференция конфигураций ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2017, 12:30 |
|
||
|
Tomcat classloader: как его забороть?
|
|||
|---|---|---|---|
|
#18+
ivanraПоясните вкратце как работает класслоадер в томкате? Дык ... . Иерархический, но без изоляции. Соответственно, "глобальные вещи" выносим в {catalina.base}/lib или даже в системный загрузчик. Если log4j, то лучше настроить на него самого котяру и "покласть" jar-ник туда, куда удобнее скрипту запуска. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2017, 12:30 |
|
||
|
Tomcat classloader: как его забороть?
|
|||
|---|---|---|---|
|
#18+
Насколько мне изменяет склероз и беглое чтение документации, в отличии от ДикойМухи (с изоляцией) у вас получится не две конфигурации log4j, а одна, но параметризованная (специальными) свойствами ${engine}, ${host}, ${context} и другими, если они вам понадобятся. P.S. В своё время я сделал так, что все котяры в кластере использовали собственный номер порта для AJP-коннектора. Этот номер задавался в скрипте запуска стандартным: Код: plaintext Дальше "котовья магия" делала подстановку и после запуска из одного файла получалось много конфигураций, где не пересекалось ничего из нужного: у каждой JVM (приложения в JVM) собственные temp, логи и каталоги для них и т.д. и т.п. Т.е. весь кластер можно было запустить на одном хосте и он работал без каких-либо проблем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2017, 13:48 |
|
||
|
Tomcat classloader: как его забороть?
|
|||
|---|---|---|---|
|
#18+
Попытаюсь объяснить что нужно. Имеется 2 приложения app1 и app2. Хочется, чтобы логи от них писались в разные файлы. Причем, интересует только логи из ru.mydomain. Вот такие log4j.properties app1 Код: powershell 1. 2. 3. 4. app2 Код: powershell 1. 2. 3. 4. То есть, теоретически, app1 должно писать в log1, app2 - в log2 А фактически на сервере tomcat-7 происходит следующее - если log4j.jar добавлять в приложения, то логирование работает в том, которое успело задеплоится первым, во втором ошибка как я описал выше. Несмотря на заверения документации. - если log4j положить в lib, то создаются оба файла .log, но весь вывод идет в один из них (насколько я понимаю, в лог приложения, которое задеплоилось последним). Интерференция по ru.mydomain Что делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2017, 14:57 |
|
||
|
Tomcat classloader: как его забороть?
|
|||
|---|---|---|---|
|
#18+
Выяснилось: в classpath сервера лежит еще один log4j, и его трогать нельзя (используется специфическими библиотеками). Придется, видимо, логгировать ru.mydomain без использования log4j. Документация сервера не врала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2017, 16:16 |
|
||
|
Tomcat classloader: как его забороть?
|
|||
|---|---|---|---|
|
#18+
ivanraЧто делать? ну был вроде этот вопрос про логи в разные файлы. Поищи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2017, 16:57 |
|
||
|
Tomcat classloader: как его забороть?
|
|||
|---|---|---|---|
|
#18+
ivanraТо есть, теоретически, app1 должно писать в log1, app2 - в log2 А фактически на сервере tomcat-7 происходит следующееЯ же говорю - log4j.xml (лучше - xml) должен быть один и предусматривать настройки всех приложений (контекстов), развёрнутых на сервере. Котяра создаёт категории вида : Код: plaintext Код: plaintext Если я всё правильно помню, то спецсвойства ${engine}, ${host} и ${context} упрощают работу, т.к. котяра сам развёрнёт ${context} в разные значения для разных приложений - просто используем ${context} в имени файла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2017, 18:14 |
|
||
|
Tomcat classloader: как его забороть?
|
|||
|---|---|---|---|
|
#18+
ivanraВыяснилось: в classpath сервера лежит еще один log4j, и его трогать нельзя"Ох уж эти сказочки, ох уж эти сказочники". Аккуратно добавили свой блок. Естественно, договорившись о мирном сосуществовании. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2017, 18:16 |
|
||
|
Tomcat classloader: как его забороть?
|
|||
|---|---|---|---|
|
#18+
ivanra, Посмотрите в сторону slf4j (это на будущее) - https://www.slf4j.org/legacy.html - slf4j официально (возможно пока ) не поддерживает только jboss-logging ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2017, 18:54 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39421836&tid=2123059]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
50ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 195ms |
| total: | 338ms |

| 0 / 0 |
