diff --git a/jetty-runner/src/main/java/org/eclipse/jetty/runner/Runner.java b/jetty-runner/src/main/java/org/eclipse/jetty/runner/Runner.java
index 9348f82858f..eff1730391b 100644
--- a/jetty-runner/src/main/java/org/eclipse/jetty/runner/Runner.java
+++ b/jetty-runner/src/main/java/org/eclipse/jetty/runner/Runner.java
@@ -34,8 +34,8 @@ import org.eclipse.jetty.security.HashLoginService;
import org.eclipse.jetty.security.authentication.BasicAuthenticator;
import org.eclipse.jetty.server.AbstractConnector;
import org.eclipse.jetty.server.Connector;
+import org.eclipse.jetty.server.CustomRequestLog;
import org.eclipse.jetty.server.Handler;
-import org.eclipse.jetty.server.NCSARequestLog;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.ShutdownMonitor;
@@ -497,8 +497,7 @@ public class Runner
if (_logFile!=null)
{
- NCSARequestLog requestLog = new NCSARequestLog(_logFile);
- requestLog.setExtended(false);
+ CustomRequestLog requestLog = new CustomRequestLog(_logFile);
_server.setRequestLog(requestLog);
}
}
diff --git a/jetty-server/src/main/config/etc/jetty-requestlog.xml b/jetty-server/src/main/config/etc/jetty-requestlog.xml
deleted file mode 100644
index 14faceea72b..00000000000
--- a/jetty-server/src/main/config/etc/jetty-requestlog.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- /
- jetty.requestlog.filePath
- requestlog.filename
- /yyyy_mm_dd.request.log
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/jetty-server/src/main/config/modules/customrequestlog.mod b/jetty-server/src/main/config/modules/customrequestlog.mod
index 6f3e127058a..3bda6ee4005 100644
--- a/jetty-server/src/main/config/modules/customrequestlog.mod
+++ b/jetty-server/src/main/config/modules/customrequestlog.mod
@@ -1,13 +1,14 @@
DO NOT EDIT - See: https://www.eclipse.org/jetty/documentation/current/startup-modules.html
[description]
-Enables a format string style request log.
+An implementation of requestlog using CustomRequestLog and AsyncRequestLogWriter
[provides]
-requestlog
+requestlog-impl
[tags]
requestlog
+logging
[depend]
server
@@ -17,8 +18,12 @@ etc/jetty-customrequestlog.xml
[files]
logs/
+basehome:modules/requestlog/jetty-customrequestlog.xml|etc/jetty-customrequestlog.xml
[ini-template]
+## Format string
+# jetty.customrequestlog.formatString=%a - %u %{dd/MMM/yyyy:HH:mm:ss ZZZ|GMT}t "%r" %s %B "%{Referer}i" "%{User-Agent}i" "%C"
+
## Logging directory (relative to $jetty.base)
# jetty.requestlog.dir=logs
@@ -36,6 +41,3 @@ logs/
## Timezone of the log file rollover
# jetty.requestlog.timezone=GMT
-
-## Format string
-# jetty.customrequestlog.formatString=%a - %u %{dd/MMM/yyyy:HH:mm:ss ZZZ|GMT}t "%r" %s %B "%{Referer}i" "%{User-Agent}i" "%C"
diff --git a/jetty-server/src/main/config/modules/logback-access.mod b/jetty-server/src/main/config/modules/logback-access.mod
index ee5ec462218..3e0a01edcf2 100644
--- a/jetty-server/src/main/config/modules/logback-access.mod
+++ b/jetty-server/src/main/config/modules/logback-access.mod
@@ -14,7 +14,7 @@ logback-impl
resources
[provide]
-requestlog
+requestlog-impl
[xml]
etc/jetty-logback-access.xml
diff --git a/jetty-server/src/main/config/modules/requestlog.mod b/jetty-server/src/main/config/modules/requestlog.mod
index e8e971be87b..52edafc3c27 100644
--- a/jetty-server/src/main/config/modules/requestlog.mod
+++ b/jetty-server/src/main/config/modules/requestlog.mod
@@ -1,44 +1,12 @@
DO NOT EDIT - See: https://www.eclipse.org/jetty/documentation/current/startup-modules.html
[description]
-Enables a NCSA style request log.
+Enables the default custom request log.
[tags]
requestlog
-[depend]
-server
+[depends]
+customrequestlog
-[xml]
-etc/jetty-requestlog.xml
-[files]
-logs/
-
-[ini-template]
-## Logging directory (relative to $jetty.base)
-# jetty.requestlog.dir=logs
-
-## File path
-# jetty.requestlog.filePath=${jetty.requestlog.dir}/yyyy_mm_dd.request.log
-
-## Date format for rollovered files (uses SimpleDateFormat syntax)
-# jetty.requestlog.filenameDateFormat=yyyy_MM_dd
-
-## How many days to retain old log files
-# jetty.requestlog.retainDays=90
-
-## Whether to append to existing file
-# jetty.requestlog.append=false
-
-## Whether to use the extended log output
-# jetty.requestlog.extended=true
-
-## Whether to log http cookie information
-# jetty.requestlog.cookies=true
-
-## Timezone of the log entries
-# jetty.requestlog.timezone=GMT
-
-## Whether to log LogLatency
-# jetty.requestlog.loglatency=false
diff --git a/jetty-server/src/main/config/etc/jetty-customrequestlog.xml b/jetty-server/src/main/config/modules/requestlog/jetty-customrequestlog.xml
similarity index 100%
rename from jetty-server/src/main/config/etc/jetty-customrequestlog.xml
rename to jetty-server/src/main/config/modules/requestlog/jetty-customrequestlog.xml
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/AbstractNCSARequestLog.java b/jetty-server/src/main/java/org/eclipse/jetty/server/AbstractNCSARequestLog.java
deleted file mode 100644
index 0df842749f5..00000000000
--- a/jetty-server/src/main/java/org/eclipse/jetty/server/AbstractNCSARequestLog.java
+++ /dev/null
@@ -1,516 +0,0 @@
-//
-// ========================================================================
-// Copyright (c) 1995-2018 Mort Bay Consulting Pty. Ltd.
-// ------------------------------------------------------------------------
-// All rights reserved. This program and the accompanying materials
-// are made available under the terms of the Eclipse Public License v1.0
-// and Apache License v2.0 which accompanies this distribution.
-//
-// The Eclipse Public License is available at
-// http://www.eclipse.org/legal/epl-v10.html
-//
-// The Apache License v2.0 is available at
-// http://www.opensource.org/licenses/apache2.0.php
-//
-// You may elect to redistribute this code under either of these licenses.
-// ========================================================================
-//
-
-package org.eclipse.jetty.server;
-
-import java.io.IOException;
-import java.util.Locale;
-
-import javax.servlet.http.Cookie;
-
-import org.eclipse.jetty.http.HttpHeader;
-import org.eclipse.jetty.http.pathmap.PathMappings;
-import org.eclipse.jetty.server.handler.StatisticsHandler;
-import org.eclipse.jetty.util.DateCache;
-import org.eclipse.jetty.util.annotation.ManagedAttribute;
-import org.eclipse.jetty.util.component.ContainerLifeCycle;
-import org.eclipse.jetty.util.log.Log;
-import org.eclipse.jetty.util.log.Logger;
-
-/**
- * Base implementation of the {@link RequestLog} outputs logs in the pseudo-standard NCSA common log format.
- * Configuration options allow a choice between the standard Common Log Format (as used in the 3 log format) and the
- * Combined Log Format (single log format). This log format can be output by most web servers, and almost all web log
- * analysis software can understand these formats.
- *
- * @deprecated use {@link CustomRequestLog} given format string {@link CustomRequestLog#EXTENDED_NCSA_FORMAT} with a {@link RequestLog.Writer}
- */
-@Deprecated
-public class AbstractNCSARequestLog extends ContainerLifeCycle implements RequestLog
-{
- protected static final Logger LOG = Log.getLogger(AbstractNCSARequestLog.class);
-
- private static ThreadLocal _buffers = ThreadLocal.withInitial(() -> new StringBuilder(256));
-
- protected final RequestLog.Writer _requestLogWriter;
-
- private String[] _ignorePaths;
- private boolean _extended;
- private PathMappings _ignorePathMap;
- private boolean _logLatency = false;
- private boolean _logCookies = false;
- private boolean _logServer = false;
- private boolean _preferProxiedForAddress;
- private transient DateCache _logDateCache;
- private String _logDateFormat = "dd/MMM/yyyy:HH:mm:ss Z";
- private Locale _logLocale = Locale.getDefault();
- private String _logTimeZone = "GMT";
-
- public AbstractNCSARequestLog(RequestLog.Writer requestLogWriter)
- {
- this._requestLogWriter = requestLogWriter;
- addBean(_requestLogWriter);
- }
-
- /**
- * Is logging enabled
- *
- * @return true if logging is enabled
- */
- protected boolean isEnabled()
- {
- return true;
- }
-
- /**
- * Write requestEntry out. (to disk or slf4j log)
- *
- * @param requestEntry the request entry
- * @throws IOException if unable to write the entry
- */
- public void write(String requestEntry) throws IOException
- {
- _requestLogWriter.write(requestEntry);
- }
-
- private void append(StringBuilder buf, String s)
- {
- if (s == null || s.length() == 0)
- buf.append('-');
- else
- buf.append(s);
- }
-
- /**
- * Writes the request and response information to the output stream.
- *
- * @see org.eclipse.jetty.server.RequestLog#log(Request, Response)
- */
- @Override
- public void log(Request request, Response response)
- {
- try
- {
- if (_ignorePathMap != null && _ignorePathMap.getMatch(request.getRequestURI()) != null)
- return;
-
- if (!isEnabled())
- return;
-
- StringBuilder buf = _buffers.get();
- buf.setLength(0);
-
- if (_logServer)
- {
- append(buf, request.getServerName());
- buf.append(' ');
- }
-
- String addr = null;
- if (_preferProxiedForAddress)
- {
- addr = request.getHeader(HttpHeader.X_FORWARDED_FOR.toString());
- }
-
- if (addr == null)
- addr = request.getRemoteAddr();
-
- buf.append(addr);
- buf.append(" - ");
-
- String auth = getAuthentication(request);
- append(buf, auth == null ? "-" : auth);
-
- buf.append(" [");
- if (_logDateCache != null)
- buf.append(_logDateCache.format(request.getTimeStamp()));
- else
- buf.append(request.getTimeStamp());
-
- buf.append("] \"");
- append(buf, request.getMethod());
- buf.append(' ');
- append(buf, request.getOriginalURI());
- buf.append(' ');
- append(buf, request.getProtocol());
- buf.append("\" ");
-
- int status = response.getCommittedMetaData().getStatus();
- if (status >= 0)
- {
- buf.append((char)('0' + ((status / 100) % 10)));
- buf.append((char)('0' + ((status / 10) % 10)));
- buf.append((char)('0' + (status % 10)));
- }
- else
- buf.append(status);
-
- long written = response.getHttpChannel().getBytesWritten();
- if (written >= 0)
- {
- buf.append(' ');
- if (written > 99999)
- buf.append(written);
- else
- {
- if (written > 9999)
- buf.append((char)('0' + ((written / 10000) % 10)));
- if (written > 999)
- buf.append((char)('0' + ((written / 1000) % 10)));
- if (written > 99)
- buf.append((char)('0' + ((written / 100) % 10)));
- if (written > 9)
- buf.append((char)('0' + ((written / 10) % 10)));
- buf.append((char)('0' + (written) % 10));
- }
- buf.append(' ');
- }
- else
- buf.append(" - ");
-
-
- if (_extended)
- logExtended(buf, request, response);
-
- if (_logCookies)
- {
- Cookie[] cookies = request.getCookies();
- if (cookies == null || cookies.length == 0)
- buf.append(" -");
- else
- {
- buf.append(" \"");
- for (int i = 0; i < cookies.length; i++)
- {
- if (i != 0)
- buf.append(';');
- buf.append(cookies[i].getName());
- buf.append('=');
- buf.append(cookies[i].getValue());
- }
- buf.append('\"');
- }
- }
-
- if (_logLatency)
- {
- long now = System.currentTimeMillis();
-
- if (_logLatency)
- {
- buf.append(' ');
- buf.append(now - request.getTimeStamp());
- }
- }
-
- String log = buf.toString();
- write(log);
- }
- catch (IOException e)
- {
- LOG.warn(e);
- }
- }
-
- /**
- * Extract the user authentication
- *
- * @param request The request to extract from
- * @return The string to log for authenticated user.
- */
- protected String getAuthentication(Request request)
- {
- Authentication authentication = request.getAuthentication();
-
- if (authentication instanceof Authentication.User)
- return ((Authentication.User)authentication).getUserIdentity().getUserPrincipal().getName();
-
- // TODO extract the user name if it is Authentication.Deferred and return as '?username'
-
- return null;
- }
-
- /**
- * Writes extended request and response information to the output stream.
- *
- * @param b StringBuilder to write to
- * @param request request object
- * @param response response object
- * @throws IOException if unable to log the extended information
- */
- protected void logExtended(StringBuilder b, Request request, Response response) throws IOException
- {
- String referer = request.getHeader(HttpHeader.REFERER.toString());
- if (referer == null)
- b.append("\"-\" ");
- else
- {
- b.append('"');
- b.append(referer);
- b.append("\" ");
- }
-
- String agent = request.getHeader(HttpHeader.USER_AGENT.toString());
- if (agent == null)
- b.append("\"-\"");
- else
- {
- b.append('"');
- b.append(agent);
- b.append('"');
- }
- }
-
- /**
- * Set request paths that will not be logged.
- *
- * @param ignorePaths array of request paths
- */
- public void setIgnorePaths(String[] ignorePaths)
- {
- _ignorePaths = ignorePaths;
- }
-
- /**
- * Retrieve the request paths that will not be logged.
- *
- * @return array of request paths
- */
- public String[] getIgnorePaths()
- {
- return _ignorePaths;
- }
-
- /**
- * Controls logging of the request cookies.
- *
- * @param logCookies true - values of request cookies will be logged, false - values of request cookies will not be
- * logged
- */
- public void setLogCookies(boolean logCookies)
- {
- _logCookies = logCookies;
- }
-
- /**
- * Retrieve log cookies flag
- *
- * @return value of the flag
- */
- public boolean getLogCookies()
- {
- return _logCookies;
- }
-
- /**
- * Controls logging of the request hostname.
- *
- * @param logServer true - request hostname will be logged, false - request hostname will not be logged
- */
- public void setLogServer(boolean logServer)
- {
- _logServer = logServer;
- }
-
- /**
- * Retrieve log hostname flag.
- *
- * @return value of the flag
- */
- public boolean getLogServer()
- {
- return _logServer;
- }
-
- /**
- * Controls logging of request processing time.
- *
- * @param logLatency true - request processing time will be logged false - request processing time will not be
- * logged
- */
- public void setLogLatency(boolean logLatency)
- {
- _logLatency = logLatency;
- }
-
- /**
- * Retrieve log request processing time flag.
- *
- * @return value of the flag
- */
- public boolean getLogLatency()
- {
- return _logLatency;
- }
-
- /**
- * @param value true to log dispatch
- * @deprecated use {@link StatisticsHandler}
- */
- @Deprecated
- public void setLogDispatch(boolean value)
- {
- }
-
- /**
- * @return true if logging dispatches
- * @deprecated use {@link StatisticsHandler}
- */
- @Deprecated
- public boolean isLogDispatch()
- {
- return false;
- }
-
- /**
- * Controls whether the actual IP address of the connection or the IP address from the X-Forwarded-For header will
- * be logged.
- *
- * @param preferProxiedForAddress true - IP address from header will be logged, false - IP address from the
- * connection will be logged
- */
- public void setPreferProxiedForAddress(boolean preferProxiedForAddress)
- {
- _preferProxiedForAddress = preferProxiedForAddress;
- }
-
- /**
- * Retrieved log X-Forwarded-For IP address flag.
- *
- * @return value of the flag
- */
- public boolean getPreferProxiedForAddress()
- {
- return _preferProxiedForAddress;
- }
-
- /**
- * Set the extended request log format flag.
- *
- * @param extended true - log the extended request information, false - do not log the extended request information
- */
- public void setExtended(boolean extended)
- {
- _extended = extended;
- }
-
- /**
- * Retrieve the extended request log format flag.
- *
- * @return value of the flag
- */
- @ManagedAttribute("use extended NCSA format")
- public boolean isExtended()
- {
- return _extended;
- }
-
- /**
- * Set up request logging and open log file.
- *
- * @see org.eclipse.jetty.util.component.AbstractLifeCycle#doStart()
- */
- @Override
- protected synchronized void doStart() throws Exception
- {
- if (_logDateFormat != null)
- {
- _logDateCache = new DateCache(_logDateFormat, _logLocale, _logTimeZone);
- }
-
- if (_ignorePaths != null && _ignorePaths.length > 0)
- {
- _ignorePathMap = new PathMappings<>();
- for (int i = 0; i < _ignorePaths.length; i++)
- _ignorePathMap.put(_ignorePaths[i], _ignorePaths[i]);
- }
- else
- _ignorePathMap = null;
-
- super.doStart();
- }
-
- @Override
- protected void doStop() throws Exception
- {
- _logDateCache = null;
- super.doStop();
- }
-
- /**
- * Set the timestamp format for request log entries in the file. If this is not set, the pre-formated request
- * timestamp is used.
- *
- * @param format timestamp format string
- */
- public void setLogDateFormat(String format)
- {
- _logDateFormat = format;
- }
-
- /**
- * Retrieve the timestamp format string for request log entries.
- *
- * @return timestamp format string.
- */
- public String getLogDateFormat()
- {
- return _logDateFormat;
- }
-
- /**
- * Set the locale of the request log.
- *
- * @param logLocale locale object
- */
- public void setLogLocale(Locale logLocale)
- {
- _logLocale = logLocale;
- }
-
- /**
- * Retrieve the locale of the request log.
- *
- * @return locale object
- */
- public Locale getLogLocale()
- {
- return _logLocale;
- }
-
- /**
- * Set the timezone of the request log.
- *
- * @param tz timezone string
- */
- public void setLogTimeZone(String tz)
- {
- _logTimeZone = tz;
- }
-
- /**
- * Retrieve the timezone of the request log.
- *
- * @return timezone string
- */
- @ManagedAttribute("the timezone")
- public String getLogTimeZone()
- {
- return _logTimeZone;
- }
-}
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/AsyncNCSARequestLog.java b/jetty-server/src/main/java/org/eclipse/jetty/server/AsyncNCSARequestLog.java
deleted file mode 100644
index 3290b7794d2..00000000000
--- a/jetty-server/src/main/java/org/eclipse/jetty/server/AsyncNCSARequestLog.java
+++ /dev/null
@@ -1,39 +0,0 @@
-//
-// ========================================================================
-// Copyright (c) 1995-2018 Mort Bay Consulting Pty. Ltd.
-// ------------------------------------------------------------------------
-// All rights reserved. This program and the accompanying materials
-// are made available under the terms of the Eclipse Public License v1.0
-// and Apache License v2.0 which accompanies this distribution.
-//
-// The Eclipse Public License is available at
-// http://www.eclipse.org/legal/epl-v10.html
-//
-// The Apache License v2.0 is available at
-// http://www.opensource.org/licenses/apache2.0.php
-//
-// You may elect to redistribute this code under either of these licenses.
-// ========================================================================
-//
-
-package org.eclipse.jetty.server;
-
-import java.util.concurrent.BlockingQueue;
-
-/**
- * An asynchronously writing NCSA Request Log
- * @deprecated use {@link CustomRequestLog} given format string {@link CustomRequestLog#EXTENDED_NCSA_FORMAT} with an {@link AsyncRequestLogWriter}
- */
-@Deprecated
-public class AsyncNCSARequestLog extends NCSARequestLog
-{
- public AsyncNCSARequestLog()
- {
- this(null,null);
- }
-
- public AsyncNCSARequestLog(String filename, BlockingQueue queue)
- {
- super(new AsyncRequestLogWriter(filename, queue));
- }
-}
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/NCSARequestLog.java b/jetty-server/src/main/java/org/eclipse/jetty/server/NCSARequestLog.java
deleted file mode 100644
index 6a660fb3dc1..00000000000
--- a/jetty-server/src/main/java/org/eclipse/jetty/server/NCSARequestLog.java
+++ /dev/null
@@ -1,219 +0,0 @@
-//
-// ========================================================================
-// Copyright (c) 1995-2018 Mort Bay Consulting Pty. Ltd.
-// ------------------------------------------------------------------------
-// All rights reserved. This program and the accompanying materials
-// are made available under the terms of the Eclipse Public License v1.0
-// and Apache License v2.0 which accompanies this distribution.
-//
-// The Eclipse Public License is available at
-// http://www.eclipse.org/legal/epl-v10.html
-//
-// The Apache License v2.0 is available at
-// http://www.opensource.org/licenses/apache2.0.php
-//
-// You may elect to redistribute this code under either of these licenses.
-// ========================================================================
-//
-
-package org.eclipse.jetty.server;
-
-import java.io.IOException;
-import java.util.TimeZone;
-
-import org.eclipse.jetty.util.RolloverFileOutputStream;
-import org.eclipse.jetty.util.annotation.ManagedAttribute;
-import org.eclipse.jetty.util.annotation.ManagedObject;
-
-/**
- * This {@link RequestLog} implementation outputs logs in the pseudo-standard
- * NCSA common log format. Configuration options allow a choice between the
- * standard Common Log Format (as used in the 3 log format) and the Combined Log
- * Format (single log format). This log format can be output by most web
- * servers, and almost all web log analysis software can understand these
- * formats.
- *
- * @deprecated use {@link CustomRequestLog} given format string {@link CustomRequestLog#EXTENDED_NCSA_FORMAT} with a {@link RequestLogWriter}
- */
-@Deprecated
-@ManagedObject("NCSA standard format request log")
-public class NCSARequestLog extends AbstractNCSARequestLog
-{
- private final RequestLogWriter _requestLogWriter;
-
- /**
- * Create request log object with default settings.
- */
- public NCSARequestLog()
- {
- this((String)null);
- }
-
- /**
- * Create request log object with specified output file name.
- *
- * @param filename the file name for the request log.
- * This may be in the format expected
- * by {@link RolloverFileOutputStream}
- */
- public NCSARequestLog(String filename)
- {
- this(new RequestLogWriter(filename));
- }
-
- /**
- * Create request log object given a RequestLogWriter file name.
- *
- * @param writer the writer which manages the output of the formatted string
- * produced by the {@link RequestLog}
- */
- public NCSARequestLog(RequestLogWriter writer)
- {
- super(writer);
- _requestLogWriter = writer;
- setExtended(true);
- }
-
- /**
- * Set the output file name of the request log.
- * The file name may be in the format expected by
- * {@link RolloverFileOutputStream}.
- *
- * @param filename file name of the request log
- */
- public void setFilename(String filename)
- {
- _requestLogWriter.setFilename(filename);
- }
-
- @Override
- public void setLogTimeZone(String tz)
- {
- super.setLogTimeZone(tz);
- _requestLogWriter.setTimeZone(tz);
- }
-
- /**
- * Retrieve the output file name of the request log.
- *
- * @return file name of the request log
- */
- @ManagedAttribute("file of log")
- public String getFilename()
- {
- return _requestLogWriter.getFileName();
- }
-
- /**
- * Retrieve the file name of the request log with the expanded
- * date wildcard if the output is written to the disk using
- * {@link RolloverFileOutputStream}.
- *
- * @return file name of the request log, or null if not applicable
- */
- public String getDatedFilename()
- {
- return _requestLogWriter.getDatedFilename();
- }
-
- @Override
- protected boolean isEnabled()
- {
- return _requestLogWriter.isEnabled();
- }
-
- /**
- * Set the number of days before rotated log files are deleted.
- *
- * @param retainDays number of days to keep a log file
- */
- public void setRetainDays(int retainDays)
- {
- _requestLogWriter.setRetainDays(retainDays);
- }
-
- /**
- * Retrieve the number of days before rotated log files are deleted.
- *
- * @return number of days to keep a log file
- */
- @ManagedAttribute("number of days that log files are kept")
- public int getRetainDays()
- {
- return _requestLogWriter.getRetainDays();
- }
-
- /**
- * Set append to log flag.
- *
- * @param append true - request log file will be appended after restart,
- * false - request log file will be overwritten after restart
- */
- public void setAppend(boolean append)
- {
- _requestLogWriter.setAppend(append);
- }
-
- /**
- * Retrieve append to log flag.
- *
- * @return value of the flag
- */
- @ManagedAttribute("existing log files are appends to the new one")
- public boolean isAppend()
- {
- return _requestLogWriter.isAppend();
- }
-
- /**
- * Set the log file name date format.
- *
- * @param logFileDateFormat format string that is passed to {@link RolloverFileOutputStream}
- * @see RolloverFileOutputStream#RolloverFileOutputStream(String, boolean, int, TimeZone, String, String)
- */
- public void setFilenameDateFormat(String logFileDateFormat)
- {
- _requestLogWriter.setFilenameDateFormat(logFileDateFormat);
- }
-
- /**
- * Retrieve the file name date format string.
- *
- * @return the log File Date Format
- */
- public String getFilenameDateFormat()
- {
- return _requestLogWriter.getFilenameDateFormat();
- }
-
- @Override
- public void write(String requestEntry) throws IOException
- {
- _requestLogWriter.write(requestEntry);
- }
-
- /**
- * Set up request logging and open log file.
- *
- * @see org.eclipse.jetty.util.component.AbstractLifeCycle#doStart()
- */
- @Override
- protected synchronized void doStart() throws Exception
- {
- super.doStart();
- }
-
- /**
- * Close the log file and perform cleanup.
- *
- * @see org.eclipse.jetty.util.component.AbstractLifeCycle#doStop()
- */
- @Override
- protected void doStop() throws Exception
- {
- synchronized (this)
- {
- super.doStop();
- }
- }
-}
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/Slf4jRequestLog.java b/jetty-server/src/main/java/org/eclipse/jetty/server/Slf4jRequestLog.java
deleted file mode 100644
index a6340c9f399..00000000000
--- a/jetty-server/src/main/java/org/eclipse/jetty/server/Slf4jRequestLog.java
+++ /dev/null
@@ -1,67 +0,0 @@
-//
-// ========================================================================
-// Copyright (c) 1995-2018 Mort Bay Consulting Pty. Ltd.
-// ------------------------------------------------------------------------
-// All rights reserved. This program and the accompanying materials
-// are made available under the terms of the Eclipse Public License v1.0
-// and Apache License v2.0 which accompanies this distribution.
-//
-// The Eclipse Public License is available at
-// http://www.eclipse.org/legal/epl-v10.html
-//
-// The Apache License v2.0 is available at
-// http://www.opensource.org/licenses/apache2.0.php
-//
-// You may elect to redistribute this code under either of these licenses.
-// ========================================================================
-//
-
-package org.eclipse.jetty.server;
-
-import java.io.IOException;
-
-import org.eclipse.jetty.util.annotation.ManagedObject;
-
-/**
- * Implementation of NCSARequestLog where output is sent as a SLF4J INFO Log message on the named logger "org.eclipse.jetty.server.RequestLog"
- * @deprecated use {@link CustomRequestLog} given format string {@link CustomRequestLog#EXTENDED_NCSA_FORMAT} with an {@link Slf4jRequestLogWriter}
- */
-@Deprecated
-@ManagedObject("NCSA standard format request log to slf4j bridge")
-public class Slf4jRequestLog extends AbstractNCSARequestLog
-{
- private final Slf4jRequestLogWriter _requestLogWriter;
-
- public Slf4jRequestLog()
- {
- this(new Slf4jRequestLogWriter());
- }
-
- public Slf4jRequestLog(Slf4jRequestLogWriter writer)
- {
- super(writer);
- _requestLogWriter = writer;
- }
-
- public void setLoggerName(String loggerName)
- {
- _requestLogWriter.setLoggerName(loggerName);
- }
-
- public String getLoggerName()
- {
- return _requestLogWriter.getLoggerName();
- }
-
- @Override
- protected boolean isEnabled()
- {
- return _requestLogWriter.isEnabled();
- }
-
- @Override
- public void write(String requestEntry) throws IOException
- {
- _requestLogWriter.write(requestEntry);
- }
-}
diff --git a/jetty-server/src/test/java/org/eclipse/jetty/server/handler/NcsaRequestLogTest.java b/jetty-server/src/test/java/org/eclipse/jetty/server/handler/NcsaRequestLogTest.java
index 48c23b98953..fc1a7ec7efd 100644
--- a/jetty-server/src/test/java/org/eclipse/jetty/server/handler/NcsaRequestLogTest.java
+++ b/jetty-server/src/test/java/org/eclipse/jetty/server/handler/NcsaRequestLogTest.java
@@ -34,7 +34,6 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.jetty.http.BadMessageException;
-import org.eclipse.jetty.server.AbstractNCSARequestLog;
import org.eclipse.jetty.server.CustomRequestLog;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.HttpChannel;
@@ -53,7 +52,6 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
-import org.junit.jupiter.params.provider.ValueSource;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsString;
@@ -75,13 +73,6 @@ public class NcsaRequestLogTest
case "customNCSA":
_log = new CustomRequestLog(writer, CustomRequestLog.EXTENDED_NCSA_FORMAT);
break;
- case "NCSA":
- {
- AbstractNCSARequestLog logNCSA = new AbstractNCSARequestLog(writer);
- logNCSA.setExtended(true);
- _log = logNCSA;
- break;
- }
default:
throw new IllegalStateException("invalid logType");
}
@@ -122,42 +113,47 @@ public class NcsaRequestLogTest
_server.stop();
stacklessLogging.close();
}
-
+
+ // TODO include logback?
+ public static Stream ncsaImplementations()
+ {
+ return Stream.of(Arguments.of("customNCSA"));
+ }
@ParameterizedTest()
- @ValueSource(strings = {"customNCSA", "NCSA"})
+ @MethodSource("ncsaImplementations")
public void testNotHandled(String logType) throws Exception
{
setup(logType);
testHandlerServerStart();
-
+
_connector.getResponse("GET /foo HTTP/1.0\n\n");
String log = _entries.poll(5,TimeUnit.SECONDS);
assertThat(log,containsString("GET /foo HTTP/1.0\" 404 "));
}
@ParameterizedTest()
- @ValueSource(strings = {"customNCSA", "NCSA"})
+ @MethodSource("ncsaImplementations")
public void testRequestLine(String logType) throws Exception
{
setup(logType);
testHandlerServerStart();
-
+
_connector.getResponse("GET /foo?data=1 HTTP/1.0\nhost: host:80\n\n");
String log = _entries.poll(5,TimeUnit.SECONDS);
assertThat(log,containsString("GET /foo?data=1 HTTP/1.0\" 200 "));
-
+
_connector.getResponse("GET //bad/foo?data=1 HTTP/1.0\n\n");
log = _entries.poll(5,TimeUnit.SECONDS);
assertThat(log,containsString("GET //bad/foo?data=1 HTTP/1.0\" 200 "));
-
+
_connector.getResponse("GET http://host:80/foo?data=1 HTTP/1.0\n\n");
log = _entries.poll(5,TimeUnit.SECONDS);
- assertThat(log,containsString("GET http://host:80/foo?data=1 HTTP/1.0\" 200 "));
+ assertThat(log,containsString("GET http://host:80/foo?data=1 HTTP/1.0\" 200 "));
}
-
+
@ParameterizedTest()
- @ValueSource(strings = {"customNCSA", "NCSA"})
+ @MethodSource("ncsaImplementations")
public void testHTTP10Host(String logType) throws Exception
{
setup(logType);
@@ -171,9 +167,9 @@ public class NcsaRequestLogTest
assertThat(log,containsString("GET /foo?name=value"));
assertThat(log,containsString(" 200 "));
}
-
+
@ParameterizedTest()
- @ValueSource(strings = {"customNCSA", "NCSA"})
+ @MethodSource("ncsaImplementations")
public void testHTTP11(String logType) throws Exception
{
setup(logType);
@@ -187,9 +183,9 @@ public class NcsaRequestLogTest
assertThat(log,containsString("GET /foo?name=value"));
assertThat(log,containsString(" 200 "));
}
-
+
@ParameterizedTest()
- @ValueSource(strings = {"customNCSA", "NCSA"})
+ @MethodSource("ncsaImplementations")
public void testAbsolute(String logType) throws Exception
{
setup(logType);
@@ -203,9 +199,9 @@ public class NcsaRequestLogTest
assertThat(log,containsString("GET http://hostname:8888/foo?name=value"));
assertThat(log,containsString(" 200 "));
}
-
+
@ParameterizedTest()
- @ValueSource(strings = {"customNCSA", "NCSA"})
+ @MethodSource("ncsaImplementations")
public void testQuery(String logType) throws Exception
{
setup(logType);
@@ -216,9 +212,9 @@ public class NcsaRequestLogTest
assertThat(log,containsString("GET /foo?name=value"));
assertThat(log,containsString(" 200 "));
}
-
+
@ParameterizedTest()
- @ValueSource(strings = {"customNCSA", "NCSA"})
+ @MethodSource("ncsaImplementations")
public void testSmallData(String logType) throws Exception
{
setup(logType);
@@ -229,9 +225,9 @@ public class NcsaRequestLogTest
assertThat(log,containsString("GET /foo?"));
assertThat(log,containsString(" 200 42 "));
}
-
+
@ParameterizedTest()
- @ValueSource(strings = {"customNCSA", "NCSA"})
+ @MethodSource("ncsaImplementations")
public void testBigData(String logType) throws Exception
{
setup(logType);
@@ -242,9 +238,9 @@ public class NcsaRequestLogTest
assertThat(log,containsString("GET /foo?"));
assertThat(log,containsString(" 200 102400 "));
}
-
+
@ParameterizedTest()
- @ValueSource(strings = {"customNCSA", "NCSA"})
+ @MethodSource("ncsaImplementations")
public void testStatus(String logType) throws Exception
{
setup(logType);
@@ -255,9 +251,9 @@ public class NcsaRequestLogTest
assertThat(log,containsString("GET /foo?"));
assertThat(log,containsString(" 206 0 "));
}
-
+
@ParameterizedTest()
- @ValueSource(strings = {"customNCSA", "NCSA"})
+ @MethodSource("ncsaImplementations")
public void testStatusData(String logType) throws Exception
{
setup(logType);
@@ -268,9 +264,9 @@ public class NcsaRequestLogTest
assertThat(log,containsString("GET /foo?"));
assertThat(log,containsString(" 206 42 "));
}
-
+
@ParameterizedTest()
- @ValueSource(strings = {"customNCSA", "NCSA"})
+ @MethodSource("ncsaImplementations")
public void testBadRequest(String logType) throws Exception
{
setup(logType);
@@ -281,9 +277,9 @@ public class NcsaRequestLogTest
assertThat(log,containsString("\"- - -\""));
assertThat(log,containsString(" 400 "));
}
-
+
@ParameterizedTest()
- @ValueSource(strings = {"customNCSA", "NCSA"})
+ @MethodSource("ncsaImplementations")
public void testBadCharacter(String logType) throws Exception
{
setup(logType);
@@ -294,9 +290,9 @@ public class NcsaRequestLogTest
assertThat(log,containsString("\"- - -\""));
assertThat(log,containsString(" 400 "));
}
-
+
@ParameterizedTest()
- @ValueSource(strings = {"customNCSA", "NCSA"})
+ @MethodSource("ncsaImplementations")
public void testBadVersion(String logType) throws Exception
{
setup(logType);
@@ -307,9 +303,9 @@ public class NcsaRequestLogTest
assertThat(log,containsString("\"- - -\""));
assertThat(log,containsString(" 400 "));
}
-
+
@ParameterizedTest()
- @ValueSource(strings = {"customNCSA", "NCSA"})
+ @MethodSource("ncsaImplementations")
public void testLongURI(String logType) throws Exception
{
setup(logType);
@@ -323,9 +319,9 @@ public class NcsaRequestLogTest
assertThat(log,containsString("\"- - -\""));
assertThat(log,containsString(" 414 "));
}
-
+
@ParameterizedTest()
- @ValueSource(strings = {"customNCSA", "NCSA"})
+ @MethodSource("ncsaImplementations")
public void testLongHeader(String logType) throws Exception
{
setup(logType);
@@ -339,9 +335,9 @@ public class NcsaRequestLogTest
assertThat(log,containsString("\"METHOD /foo HTTP/1.0\""));
assertThat(log,containsString(" 431 "));
}
-
+
@ParameterizedTest()
- @ValueSource(strings = {"customNCSA", "NCSA"})
+ @MethodSource("ncsaImplementations")
public void testBadRequestNoHost(String logType) throws Exception
{
setup(logType);
@@ -354,7 +350,7 @@ public class NcsaRequestLogTest
}
@ParameterizedTest()
- @ValueSource(strings = {"customNCSA", "NCSA"})
+ @MethodSource("ncsaImplementations")
public void testUseragentWithout(String logType) throws Exception
{
setup(logType);
@@ -367,7 +363,7 @@ public class NcsaRequestLogTest
}
@ParameterizedTest()
- @ValueSource(strings = {"customNCSA", "NCSA"})
+ @MethodSource("ncsaImplementations")
public void testUseragentWith(String logType) throws Exception
{
setup(logType);
@@ -381,12 +377,12 @@ public class NcsaRequestLogTest
// Tests from here use these parameters
- public static Stream data()
+ public static Stream scenarios()
{
List