Не роя в кишки Tomcat, чтобы быть уверенным, я думаю, что последовательность будет чем-то вроде этого.
Новый процесс для JVM запускается, передавая 'stdin', 'stdout' и 'stderr' дескрипторы файлов. Они будут обычно настраиваться оболочкой вызова и передаваться JVM через ветвление/должностное лицо syscalls. (Или независимо от того, что эквивалентный Windows...), Но в этом случае, существует некоторый сценарий обертки или исходное приложение, которое перенаправляет 'stdout' к "jakarta_service_xxx.log", прежде чем JVM будет запущена.
JVM создает некоторую внутреннюю систему регистрации (реализованный в собственном коде), который будет использоваться GC и другими сервисами JVM для входа JVM. Это будет использовать 'stdout' или 'stderr' дескрипторы файлов.
JVM создает PrintStream (OutputStream) объекты, которые переносят 'stdout' и 'stderr' дескрипторы файлов и наборы java.lang.System.out
и java.lang.System.err
к этим объектам соответственно.
JVM называет Tomcat main
метод для запуска Tomcat.
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 / ядро кота. Существуют, вероятно, конфигурационные файлы и т.д., которые позволяют Вам изменять это..., если Вы хотите.
Вы обычно хотите иметь вывод журнала, разделенный веб-приложением и также разделенный от контейнерно-внутренних сообщений (таких как сообщения диагностики JVM).
В дополнение к поддержке различных платформ журналирования Tomcat также получает System.out и System.err и перенаправляет их к соответствующему файлу журнала.
Необходимо смочь настроить точное поведение и форматирующий в конфигурационных файлах Tomcat (больше на этом на Serverfault...)