RequestLog не реализует LifeCycle в пристани 9.4 - PullRequest
0 голосов
/ 19 июня 2019

В Jetty 9.4 org.eclipse.jetty.server.RequestLog больше не реализовано org.eclipse.jetty.util.component.LifeCycle, и поэтому мой Jetty не настраивает RequestLogImpl, который отвечает за запись журналов доступа.

Любое руководство, как это можно решить?

1 Ответ

0 голосов
/ 18 июля 2019

Используйте Server.setRequestLog(RequestLog) здесь и далее.

Старый способ был ужасно сломан и не перехватывал 80% неудачных запросов, которые может иметь ваш контекст, без ошибок верхнего уровня 400, без контекстаошибок и неожиданно большого числа других угловых случаев.

Основы RequestLog были изменены еще в октябре 2014 года, чтобы учесть все эти пропущенные события регистрации.(Это было введено в Jetty 9.3.0)

https://www.eclipse.org/jetty/javadoc/current/org/eclipse/jetty/server/Server.html#setRequestLog(org.eclipse.jetty.server.RequestLog)

Поскольку вы упоминаете logback, я уверен, что вы пытаетесь настроить logback-access.

См.обсуждение на https://github.com/qos-ch/logback/pull/269

Обратите внимание, что у Jetty 9.4.15+ есть CustomRequestLog, который принимает пользовательское форматирование.

Пример использования (с slf4j)

Slf4jRequestLogWriter slf4jRequestLogWriter = new Slf4jRequestLogWriter();
// the slf4j named logger to output to
slf4jRequestLogWriter.setLoggerName("my.requestlog");
// The format of the output. (See javadoc for CustomRequestLog for details)
String requestLogFormat = "%{client}a - %u %t \"%r\" %s %O \"%{Referer}i\" \"%{User-Agent}i\"";
CustomRequestLog requestLog = new CustomRequestLog(slf4jRequestLogWriter, requestLogFormat);
server.setRequestLog(requestLog);
...