AbstractNCSARequestLog не работает для log4j - PullRequest
0 голосов
/ 18 февраля 2020

Я использую Java Spark (веб-фреймворк) и следую этому руководству: http://sparkjava.com/tutorials/jetty-request-log, чтобы включить ведение журнала.

Однако следующий класс дает мне ошибка:

constructor AbstractNCSARequestLog in class AbstractNCSARequestLog cannot be applied to given types;
                return new AbstractNCSARequestLog() {
                       ^
  required: Writer
  found: no arguments

Рассматриваемый класс:

    public class RequestLogFactory {

    private Logger logger;

    public RequestLogFactory(Logger logger) {
        this.logger = logger;
    }

    AbstractNCSARequestLog create() {
        return new AbstractNCSARequestLog() {
            @Override
            protected boolean isEnabled() {
                return true;
            }

            @Override
            public void write(String s) throws IOException {
                logger.info(s);
            }
        };
    }
}

1 Ответ

1 голос
/ 18 февраля 2020

Если вы хотите использовать формат журнала запросов NCSA старой школы, используйте Slf4jRequestLog вместо AbstractNCSARequestLog (оба устарели).

Если вы хотите использовать современные RequestLog методы, используйте CustomRequestLog с Slf4jRequestLogWriter. (дополнительным бонусом является возможность настроить формат запроса)

При любом из этих подходов вам нужно будет направить ваш slf4j к log4j (включив slf4j-log4j12-<ver>.jar в ваш путь к классам)

Теперь вы можете захватывать ваши журналы запросов на именованном регистраторе (имя регистратора настраивается в Slf4jRequestLogWriter)

Пример:

Slf4jRequestLogWriter slf4jWriter = new Slf4jRequestLogWriter();
// The name of the logger to write request logs to
slf4jWriter.setLoggerName("my.requestlog");
CustomRequestLog requestLog = new CustomRequestLog(slf4jWriter, CustomRequestLog.NCSA_FORMAT);
server.setRequestLog(requestLog);
...