Назад | Перейти на главную страницу

Сборка Ubuntu 18.04.2 Tomcat 9 не пишет в catalina.out, но находится в состоянии systemd

Итак, у меня проблема с Tomcat 9 в Ubuntu 18.04.2. Tomcat 8 работал нормально, он отлично записывал трассировки стека Java в /var/log/catalina.out. Tomcat 9, к сожалению, регистрирует только запросы GET и POST с конфигурацией Ubuntu по умолчанию через apt.

Я просмотрел это, и, похоже, есть несколько тем, как исправить, самая последняя из которых: Где находится catalina.out в Tomcat 9? - но проблема в том, что мой catalina.sh выглядит совсем иначе, чем файл, показанный в этом ответе.

Части моего catalina.sh, которые похожи (но сильно отличаются), приведены ниже. По какой-то причине при установке apt кажется, что вместо того, чтобы искать запуск catalina, вместо того, чтобы найти его PID ?:



if [ -z "$CATALINA_OUT" ] ; then
  CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out
fi

[...]

elif [ "$1" = "start" ] ; then
  if [ ! -z "$CATALINA_PID" ]; then
    if [ -f "$CATALINA_PID" ]; then
      if [ -s "$CATALINA_PID" ]; then
        echo "Existing PID file found during start."
        if [ -r "$CATALINA_PID" ]; then
          PID=`cat "$CATALINA_PID"`
          ps -p $PID >/dev/null 2>&1
          if [ $? -eq 0 ] ; then
            echo "Tomcat appears to still be running with PID $PID. Start aborted."
            echo "If the following process is not a Tomcat process, remove the PID file and try again:"
            ps -f -p $PID
            exit 1
          else
            echo "Removing/clearing stale PID file."
            rm -f "$CATALINA_PID" >/dev/null 2>&1
            if [ $? != 0 ]; then
              if [ -w "$CATALINA_PID" ]; then
                cat /dev/null > "$CATALINA_PID"
              else
                echo "Unable to remove or clear stale PID file. Start aborted."
                exit 1
              fi
            fi
          fi
        else
          echo "Unable to read PID file. Start aborted."
          exit 1
        fi
      else
        rm -f "$CATALINA_PID" >/dev/null 2>&1
        if [ $? != 0 ]; then
          if [ ! -w "$CATALINA_PID" ]; then
            echo "Unable to remove or write to empty PID file. Start aborted."
            exit 1
          fi
        fi
      fi
    fi
  fi

[...]

Однако я вижу ссылку на процесс Boostrap в разделе «Безопасность». Здесь я должен добавить строку?

Примечание. Файлы catalina.out.2019-05-07.log записываются, но, опять же, содержат только ЗАПРОСЫ, а не ОШИБКИ.

if [ "$1" = "-security" ] ; then
    if [ $have_tty -eq 1 ]; then
      echo "Using Security Manager"
    fi
    shift
    eval \{ $_NOHUP "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
      -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \
      -classpath "\"$CLASSPATH\"" \
      -Djava.security.manager \
      -Djava.security.policy=="\"$CATALINA_BASE/policy/catalina.policy\"" \
      -Dcatalina.base="\"$CATALINA_BASE\"" \
      -Dcatalina.home="\"$CATALINA_HOME\"" \
      -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
      org.apache.catalina.startup.Bootstrap "$@" start \         
      "$CATALINA_OUT" 2>&1 "&"                                <-- and here?
      2\>\&1 \&\& echo \$! \>\"$catalina_pid_file\" \; \} $catalina_out_command "&"

  else
    eval \{ $_NOHUP "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
      -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \
      -classpath "\"$CLASSPATH\"" \
      -Dcatalina.base="\"$CATALINA_BASE\"" \
      -Dcatalina.home="\"$CATALINA_HOME\"" \
      -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
      org.apache.catalina.startup.Bootstrap "$@" start \
      "$CATALINA_OUT" 2>&1 "&"                                <-- and here?
      2\>\&1 \&\& echo \$! \>\"$catalina_pid_file\" \; \} $catalina_out_command "&"

  fi

В моем файле свойств ведения журнала ДЕЙСТВИТЕЛЬНО ведется журнал консоли в качестве обработчика:

handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler

Вот что регистрируется.

illa/5.0 (X11; Ubuntu; Linux x86_64; rv:66.0) Gecko/20100101 Firefox/66.0   https://localhost:8444/asWeb/Fitness.jsp
07-May-2019 18:17:52.687 INFO [https-openssl-nio-8444-exec-5] org.restlet.engine.log.LogFilter.afterHandle 2019-05-07   18:17:52    10.0.2.2    -   10.0.2.15   8444    POST    /asWeb/r/WebLinks   -   200 502 22  113 https://localhost:8444  Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:66.0) Gecko/20100101 Firefox/66.0    https://localhost:8444/asWeb/Fitness.jsp

<<<<<< this is where it should have caught a System.out.println("DEBUG message to log"); <<<<<<<<


07-May-2019 18:17:56.318 INFO [https-openssl-nio-8444-exec-6] org.restlet.engine.log.LogFilter.afterHandle 2019-05-07   18:17:56    10.0.2.2    -   10.0.2.15   8444    POST    /asWeb/r/Chart  -   200 93  52  3372    https://localhost:8444  Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:66.0) Gecko/20100101 Firefox/66.0    https://localhost:8444/asWeb/Fitness.jsp
07-May-2019 18:17:58.471 INFO [https-openssl-nio-8444-exec-9] org.restlet.engine.log.LogFilter.afterHandle 2019-05-07   18:17:58    10.0.2.2    -   10.0.2.15   8444    POST    /asWeb/r/Fitness    -   200 -   67  5520    https://localhost:8444  Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:66.0) Gecko/20100101 Firefox/66.0    https://localhost:8444/asWeb/Fitness.jsp

Я заметил, что обработчик журнала для вывода на консоль установлен на SystemdFormatter, а не на SimpleFormatter. Я попытался изменить обработчик журнала на простой, но это не повлияло. Я вернул его в SystemdFormatter.

java.util.logging.ConsoleHandler.level = ALL
java.util.logging.ConsoleHandler.formatter = org.apache.juli.SystemdFormatter

После дальнейшего копания я могу просмотреть исключения в статусе systemd ...

root@ass:/var/log/tomcat9# service tomcat9 status
● tomcat9.service - Apache Tomcat 9 Web Application Server
   Loaded: loaded (/lib/systemd/system/tomcat9.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2019-05-07 19:28:36 CDT; 1h 21min ago
     Docs: https://tomcat.apache.org/tomcat-9.0-doc/index.html
  Process: 17539 ExecStartPre=/usr/libexec/tomcat9/tomcat-update-policy.sh (code=exited, status=0/SUCCESS)
 Main PID: 17543 (java)
    Tasks: 42 (limit: 4681)
   CGroup: /system.slice/tomcat9.service
           └─17543 /usr/lib/jvm/default-java/bin/java -Djava.util.logging.config.file=/var/lib/tomcat9/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.awt.headless=true -XX:+UseG1GC -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.ha

May 07 20:48:25 ass tomcat9[17543]: DEBUG Fitness All called!
May 07 20:48:25 ass tomcat9[17543]: 2019-05-07        20:48:25        10.0.2.2        -        10.0.2.15        8444        POST        /asWeb/r/Fitness        -        200        -        67        6696        https://localhost:8444        Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv
May 07 20:48:35 ass tomcat9[17543]: 2019-05-07        20:48:35        10.0.2.2        -        10.0.2.15        8444        POST        /asWeb/r/Wx        -        200        -        115        2260        https://localhost:8444        Mozilla/5.0 (Android 4.4.2; Mobile; rv:66.0) G
May 07 20:49:10 ass tomcat9[17543]: DEBUG Fitness All called!
May 07 20:49:10 ass tomcat9[17543]: 2019-05-07        20:49:10        10.0.2.2        -        10.0.2.15        8444        POST        /asWeb/r/Fitness        -        200        -        67        3860        https://localhost:8444        Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv
May 07 20:49:51 ass tomcat9[17543]: DEBUG Fitness All called!
May 07 20:49:51 ass tomcat9[17543]: 2019-05-07        20:49:51        10.0.2.2        -        10.0.2.15        8444        POST        /asWeb/r/Fitness        -        200        -        67        2196        https://localhost:8444        Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv
May 07 20:49:55 ass tomcat9[17543]: 2019-05-07        20:49:55        10.0.2.2        -        10.0.2.15        8444        POST        /asWeb/r/MediaServer        -        200        -        40        722        https://localhost:8444        Mozilla/5.0 (X11; Ubuntu; Linux x86_64;

И используя это, я могу "издеваться" над catalina.out, используя

journalctl -u tomcat9 -f

Но я хочу, чтобы это было на catalina.out, без просмотра журнала - если это возможно.

Вам необходимо отредактировать файл: /lib/systemd/system/tomcat9.service

Закомментируйте строку: SyslogIdentifier=tomcat9

и добавьте эти две строки:

StandardOutput=append:/var/log/tomcat9/catalina.out
StandardError=append:/var/log/tomcat9/catalina.out