From 81ca90b1f6cdada38f918d88d3aa4e2c739ace2f Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Thu, 29 Nov 2018 12:17:17 +0100 Subject: [PATCH] Issue #113 Deletes the deprecated NcsaRequestLog classes Updates modules to use CustomRequestLog by default Move jetty-customrequestlog.xml from home to base Signed-off-by: Greg Wilkins --- .../java/org/eclipse/jetty/runner/Runner.java | 5 +- .../src/main/config/etc/jetty-requestlog.xml | 30 - .../main/config/modules/customrequestlog.mod | 12 +- .../main/config/modules/logback-access.mod | 2 +- .../src/main/config/modules/requestlog.mod | 38 +- .../requestlog}/jetty-customrequestlog.xml | 0 .../jetty/server/AbstractNCSARequestLog.java | 516 ------------------ .../jetty/server/AsyncNCSARequestLog.java | 39 -- .../eclipse/jetty/server/NCSARequestLog.java | 219 -------- .../eclipse/jetty/server/Slf4jRequestLog.java | 67 --- .../server/handler/NcsaRequestLogTest.java | 114 ++-- .../java/org/eclipse/jetty/TestServer.java | 1 - 12 files changed, 68 insertions(+), 975 deletions(-) delete mode 100644 jetty-server/src/main/config/etc/jetty-requestlog.xml rename jetty-server/src/main/config/{etc => modules/requestlog}/jetty-customrequestlog.xml (100%) delete mode 100644 jetty-server/src/main/java/org/eclipse/jetty/server/AbstractNCSARequestLog.java delete mode 100644 jetty-server/src/main/java/org/eclipse/jetty/server/AsyncNCSARequestLog.java delete mode 100644 jetty-server/src/main/java/org/eclipse/jetty/server/NCSARequestLog.java delete mode 100644 jetty-server/src/main/java/org/eclipse/jetty/server/Slf4jRequestLog.java 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 data = new ArrayList<>(); - - for(String logType : Arrays.asList("customNCSA","NCSA")) + ncsaImplementations().forEach(arg-> { + String logType = String.valueOf(arg.get()[0]); data.add(new Object[]{logType, new NoopHandler(), "/noop", "\"GET /noop HTTP/1.0\" 404"}); data.add(new Object[]{logType, new HelloHandler(), "/hello", "\"GET /hello HTTP/1.0\" 200"}); data.add(new Object[]{logType, new ResponseSendErrorHandler(), "/sendError", "\"GET /sendError HTTP/1.0\" 599"}); @@ -397,13 +393,13 @@ public class NcsaRequestLogTest data.add(new Object[]{logType, new BadMessageHandler(), "/bad", "\"GET /bad HTTP/1.0\" 499"}); data.add(new Object[]{logType, new AbortHandler(), "/bad", "\"GET /bad HTTP/1.0\" 488"}); data.add(new Object[]{logType, new AbortPartialHandler(), "/bad", "\"GET /bad HTTP/1.0\" 200"}); - } + }); return data.stream().map(Arguments::of); } @ParameterizedTest - @MethodSource("data") + @MethodSource("scenarios") public void testServerRequestLog(String logType, Handler testHandler, String requestPath, String expectedLogEntry) throws Exception { setup(logType); @@ -415,7 +411,7 @@ public class NcsaRequestLogTest } @ParameterizedTest - @MethodSource("data") + @MethodSource("scenarios") public void testLogHandlerWrapper(String logType, Handler testHandler, String requestPath, String expectedLogEntry) throws Exception { setup(logType); @@ -429,7 +425,7 @@ public class NcsaRequestLogTest } @ParameterizedTest - @MethodSource("data") + @MethodSource("scenarios") public void testLogHandlerCollectionFirst(String logType, Handler testHandler, String requestPath, String expectedLogEntry) throws Exception { setup(logType); @@ -445,7 +441,7 @@ public class NcsaRequestLogTest @ParameterizedTest - @MethodSource("data") + @MethodSource("scenarios") public void testLogHandlerCollectionLast(String logType, Handler testHandler, String requestPath, String expectedLogEntry) throws Exception { setup(logType); @@ -468,7 +464,7 @@ public class NcsaRequestLogTest @ParameterizedTest - @MethodSource("data") + @MethodSource("scenarios") public void testErrorHandler(String logType, Handler testHandler, String requestPath, String expectedLogEntry) throws Exception { setup(logType); @@ -503,7 +499,7 @@ public class NcsaRequestLogTest @ParameterizedTest - @MethodSource("data") + @MethodSource("scenarios") public void testOKErrorHandler(String logType, Handler testHandler, String requestPath, String expectedLogEntry) throws Exception { setup(logType); @@ -531,7 +527,7 @@ public class NcsaRequestLogTest @ParameterizedTest - @MethodSource("data") + @MethodSource("scenarios") public void testAsyncDispatch(String logType, Handler testHandler, String requestPath, String expectedLogEntry) throws Exception { setup(logType); @@ -562,7 +558,7 @@ public class NcsaRequestLogTest @ParameterizedTest - @MethodSource("data") + @MethodSource("scenarios") public void testAsyncComplete(String logType, Handler testHandler, String requestPath, String expectedLogEntry) throws Exception { setup(logType); diff --git a/tests/test-webapps/test-jetty-webapp/src/test/java/org/eclipse/jetty/TestServer.java b/tests/test-webapps/test-jetty-webapp/src/test/java/org/eclipse/jetty/TestServer.java index 69df8ff50dd..b2fc44a6dc9 100644 --- a/tests/test-webapps/test-jetty-webapp/src/test/java/org/eclipse/jetty/TestServer.java +++ b/tests/test-webapps/test-jetty-webapp/src/test/java/org/eclipse/jetty/TestServer.java @@ -55,7 +55,6 @@ import org.eclipse.jetty.util.thread.QueuedThreadPool; import org.eclipse.jetty.webapp.Configurations; import org.eclipse.jetty.webapp.MetaInfConfiguration; import org.eclipse.jetty.webapp.WebAppContext; -import org.eclipse.jetty.webapp.WebInfConfiguration; import org.junit.jupiter.api.Disabled; @Disabled("Not a test case")