Почему Windows Tomcat обрабатывает stdout по-другому, если это от веб-приложения по сравнению с от JVM?

обе победы места и Linux u должны создать долю папки, что это однажды u сервис перезапускает кого-то, кого это будет способный скопировать вставку с обоих концов..

0
задан 16 January 2010 в 03:30
2 ответа

Не роя в кишки Tomcat, чтобы быть уверенным, я думаю, что последовательность будет чем-то вроде этого.

  1. Новый процесс для JVM запускается, передавая 'stdin', 'stdout' и 'stderr' дескрипторы файлов. Они будут обычно настраиваться оболочкой вызова и передаваться JVM через ветвление/должностное лицо syscalls. (Или независимо от того, что эквивалентный Windows...), Но в этом случае, существует некоторый сценарий обертки или исходное приложение, которое перенаправляет 'stdout' к "jakarta_service_xxx.log", прежде чем JVM будет запущена.

  2. JVM создает некоторую внутреннюю систему регистрации (реализованный в собственном коде), который будет использоваться GC и другими сервисами JVM для входа JVM. Это будет использовать 'stdout' или 'stderr' дескрипторы файлов.

  3. JVM создает PrintStream (OutputStream) объекты, которые переносят 'stdout' и 'stderr' дескрипторы файлов и наборы java.lang.System.out и java.lang.System.err к этим объектам соответственно.

  4. JVM называет Tomcat main метод для запуска Tomcat.

  5. Tomcat открывает новый FileOutputStream для "stdout_xxx.log" и использования java.lang.System.setOut() обновить java.lang.System.out. Если существуют различные файлы "stdout_xxx.log" для каждого веб-приложения, то вероятно, что Tomcat реализовал умный прокси потока вывода тот вывод демультиплексоров к различным файлам журнала на основе групп потока или чего-то...

Я подозреваю, что вход JVM не использует java.util. Вход... или любой Java кодирует вообще. Просто похоже, что это. Я говорю это, потому что я думаю, что JVM вошла бы в узлы, если бы она пыталась звонить в код Java в определенные моменты; например, в критических точках в GC. Но я мог бы быть неправ относительно этого...

Относительно того, ПОЧЕМУ это происходит, я думаю, что это происходит, потому что это обычно - хорошая идея разделить вывод "System.out/err", прибывающий из веб-приложений и из jvm / ядро кота. Существуют, вероятно, конфигурационные файлы и т.д., которые позволяют Вам изменять это..., если Вы хотите.

1
ответ дан 4 December 2019 в 23:14

Вы обычно хотите иметь вывод журнала, разделенный веб-приложением и также разделенный от контейнерно-внутренних сообщений (таких как сообщения диагностики JVM).

В дополнение к поддержке различных платформ журналирования Tomcat также получает System.out и System.err и перенаправляет их к соответствующему файлу журнала.

Необходимо смочь настроить точное поведение и форматирующий в конфигурационных файлах Tomcat (больше на этом на Serverfault...)

0
ответ дан 4 December 2019 в 23:14

Теги

Похожие вопросы