Add request log using jetty. (Default: disabled)
Configurable via kustvakt.conf
log.request.enabled = true
Change-Id: I2ebb6c7a83aa946ba2ec7d91c608978fe48f9cd5
diff --git a/Changes b/Changes
index 8cdea37..31334b6 100644
--- a/Changes
+++ b/Changes
@@ -3,6 +3,7 @@
- Bug fixes & Spring 6.2.11 upgrade (kupietz)
- Migrate to Hibernate 7x (kupietz)
- Make statistics in VC list configurable (default: false)
+- Add request log using jetty. (default: disabled)
# version 0.79
diff --git a/src/main/java/de/ids_mannheim/korap/config/KustvaktConfiguration.java b/src/main/java/de/ids_mannheim/korap/config/KustvaktConfiguration.java
index 6545719..d1e95d7 100644
--- a/src/main/java/de/ids_mannheim/korap/config/KustvaktConfiguration.java
+++ b/src/main/java/de/ids_mannheim/korap/config/KustvaktConfiguration.java
@@ -118,6 +118,7 @@
// another variable might be needed to define which metadata fields are restricted
private boolean isMetadataRestricted = false;
private boolean totalResultCacheEnabled;
+ private boolean requestLogEnabled = false;
private int guestTimeout;
private int loginTimeout;
@@ -146,6 +147,8 @@
properties.getProperty("security.secure.random.algorithm", ""));
setMessageDigestAlgorithm(
properties.getProperty("security.md.algorithm", "MD5"));
+ requestLogEnabled = Boolean.valueOf(properties.getProperty(
+ "log.request.enabled","false"));
}
/**
diff --git a/src/main/java/de/ids_mannheim/korap/server/KustvaktBaseServer.java b/src/main/java/de/ids_mannheim/korap/server/KustvaktBaseServer.java
index 9f55842..7465bcf 100644
--- a/src/main/java/de/ids_mannheim/korap/server/KustvaktBaseServer.java
+++ b/src/main/java/de/ids_mannheim/korap/server/KustvaktBaseServer.java
@@ -13,13 +13,18 @@
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+import org.eclipse.jetty.ee10.servlet.ServletContextHandler;
+import org.eclipse.jetty.ee10.servlet.ServletHolder;
import org.eclipse.jetty.server.Connector;
+import org.eclipse.jetty.server.CustomRequestLog;
+import org.eclipse.jetty.server.ForwardedRequestCustomizer;
+import org.eclipse.jetty.server.HttpConfiguration;
import org.eclipse.jetty.server.HttpConnectionFactory;
+import org.eclipse.jetty.server.RequestLog;
+import org.eclipse.jetty.server.RequestLogWriter;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.handler.ShutdownHandler;
-import org.eclipse.jetty.ee10.servlet.ServletContextHandler;
-import org.eclipse.jetty.ee10.servlet.ServletHolder;
import org.glassfish.jersey.server.ServerProperties;
import org.glassfish.jersey.servlet.ServletContainer;
import org.springframework.web.context.ContextLoaderListener;
@@ -152,12 +157,22 @@
servletHolder.setInitOrder(1);
contextHandler.addServlet(servletHolder, config.getBaseURL());
- ServerConnector connector = new ServerConnector(server);
+
+ HttpConfiguration httpConfig = new HttpConfiguration();
+ // EM: support for X-Forwarded headers
+ httpConfig.addCustomizer( new ForwardedRequestCustomizer() );
+ httpConfig.setRequestHeaderSize(64000);
+ HttpConnectionFactory connectionFactory =
+ new HttpConnectionFactory(httpConfig);
+
+ ServerConnector connector = new ServerConnector(server,
+ connectionFactory);
connector.setPort(kargs.port);
connector.setIdleTimeout(60000);
- connector.getConnectionFactory(HttpConnectionFactory.class)
- .getHttpConfiguration().setRequestHeaderSize(64000);
-
+ //connector.getConnectionFactory(HttpConnectionFactory.class)
+ // .getHttpConfiguration().setRequestHeaderSize(64000);
+
+ // MK:
// Jetty 12: Use ShutdownHandler as a wrapper instead of building a HandlerList.
// Older code (Jetty 11):
// ShutdownHandler shutdownHandler = new ShutdownHandler(adminToken, true, false);
@@ -178,8 +193,12 @@
}
shutdownHandler.setHandler(contextHandler);
server.setHandler(shutdownHandler);
-
-
+
+ // setup request log
+ if (config.isRequestLogEnabled()) {
+ server.setRequestLog(createRequestLog());
+ }
+
server.setConnectors(new Connector[] { connector });
try {
log.info("Starting server on port: " + kargs.port);
@@ -194,6 +213,18 @@
}
}
+ private RequestLog createRequestLog() {
+ RequestLogWriter logWriter = new RequestLogWriter();
+ logWriter.setFilename("data/logs/jetty-requests.log");
+ logWriter.setAppend(true);
+ logWriter.setRetainDays(30);
+
+ // format: time, client IP, method + URI, status, bytes
+ String logFormat = "%{yyyy-MM-dd HH:mm:ss}t %{client}a \"%r\" %s %O";
+ RequestLog requestLog = new CustomRequestLog(logWriter, logFormat);
+ return requestLog;
+ }
+
@Setter
public static class KustvaktArgs {
diff --git a/src/main/resources/kustvakt-lite.conf b/src/main/resources/kustvakt-lite.conf
index ba32850..4649206 100644
--- a/src/main/resources/kustvakt-lite.conf
+++ b/src/main/resources/kustvakt-lite.conf
@@ -1,3 +1,6 @@
+# This is the default configuration for Kustvakt lite version
+# Copy this file to data/kustvakt-lite.conf and adjust settings
+
# Krill settings
# index dir
@@ -17,7 +20,6 @@
current.api.version = v1.0
# multiple versions separated by space
supported.api.version = v1.0
-
# default
kustvakt.base.url=/api/*
@@ -25,6 +27,12 @@
server.port=8089
server.host=localhost
+# log
+log.request.enabled = false
+
+# Cache
+cache.total.results.enabled = true
+
# Pipe (optional)
# pipe.host=https://korap.ids-mannheim.de (default)
diff --git a/src/main/resources/kustvakt.conf b/src/main/resources/kustvakt.conf
index 61cad26..31642af 100644
--- a/src/main/resources/kustvakt.conf
+++ b/src/main/resources/kustvakt.conf
@@ -1,3 +1,6 @@
+# This is the default configuration for Kustvakt full version
+# Copy this file to data/kustvakt.conf and adjust settings
+
#Krill
krill.indexDir= sample-index
@@ -21,10 +24,17 @@
server.port=8089
server.host=localhost
+# log
+log.request.enabled = false
+
+# Cache
+cache.total.results.enabled = true
+
# Timeout
# timeout.guest = 10000 (default)
# timeout.login = 90000 (default)
+
# Pipe (optional)
# pipe.host=https://korap.ids-mannheim.de
@@ -39,6 +49,7 @@
# Virtual corpus and queries
max.user.persistent.queries = 5
+# max.token.context.size = 40
vc.list.statistics.enabled = false
# Availability regex only support |
@@ -67,6 +78,7 @@
# scopes separated by space
oauth2.default.scopes = search match_info
oauth2.client.credentials.scopes = client_info
+oauth2.initial.super.client = false
## see SecureRandom Number Generation Algorithms
## optional