use of org.eclipse.jetty.server.handler.RequestLogHandler in project incubator-pulsar by apache.
the class WebService method start.
public void start() throws PulsarServerException {
try {
RequestLogHandler requestLogHandler = new RequestLogHandler();
Slf4jRequestLog requestLog = new Slf4jRequestLog();
requestLog.setExtended(true);
requestLog.setLogTimeZone(TimeZone.getDefault().getID());
requestLog.setLogLatency(true);
requestLogHandler.setRequestLog(requestLog);
handlers.add(0, new ContextHandlerCollection());
handlers.add(requestLogHandler);
ContextHandlerCollection contexts = new ContextHandlerCollection();
contexts.setHandlers(handlers.toArray(new Handler[handlers.size()]));
HandlerCollection handlerCollection = new HandlerCollection();
handlerCollection.setHandlers(new Handler[] { contexts, new DefaultHandler(), requestLogHandler });
server.setHandler(handlerCollection);
server.start();
log.info("Web Service started at {}", pulsar.getWebServiceAddress());
} catch (Exception e) {
throw new PulsarServerException(e);
}
}
use of org.eclipse.jetty.server.handler.RequestLogHandler in project kafka by apache.
the class JsonRestServer method start.
/**
* Start the JsonRestServer.
*
* @param resources The path handling resources to register.
*/
public void start(Object... resources) {
log.info("Starting REST server");
ResourceConfig resourceConfig = new ResourceConfig();
resourceConfig.register(new JacksonJsonProvider(JsonUtil.JSON_SERDE));
for (Object resource : resources) {
resourceConfig.register(resource);
log.info("Registered resource {}", resource);
}
resourceConfig.register(RestExceptionMapper.class);
ServletContainer servletContainer = new ServletContainer(resourceConfig);
ServletHolder servletHolder = new ServletHolder(servletContainer);
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
context.addServlet(servletHolder, "/*");
RequestLogHandler requestLogHandler = new RequestLogHandler();
Slf4jRequestLogWriter slf4jRequestLogWriter = new Slf4jRequestLogWriter();
slf4jRequestLogWriter.setLoggerName(JsonRestServer.class.getCanonicalName());
CustomRequestLog requestLog = new CustomRequestLog(slf4jRequestLogWriter, CustomRequestLog.EXTENDED_NCSA_FORMAT + " %{ms}T");
requestLogHandler.setRequestLog(requestLog);
HandlerCollection handlers = new HandlerCollection();
handlers.setHandlers(new Handler[] { context, new DefaultHandler(), requestLogHandler });
StatisticsHandler statsHandler = new StatisticsHandler();
statsHandler.setHandler(handlers);
jettyServer.setHandler(statsHandler);
/* Needed for graceful shutdown as per `setStopTimeout` documentation */
jettyServer.setStopTimeout(GRACEFUL_SHUTDOWN_TIMEOUT_MS);
jettyServer.setStopAtShutdown(true);
try {
jettyServer.start();
} catch (Exception e) {
throw new RuntimeException("Unable to start REST server", e);
}
log.info("REST server listening at " + jettyServer.getURI());
}
use of org.eclipse.jetty.server.handler.RequestLogHandler in project dropwizard by dropwizard.
the class AbstractServerFactory method addRequestLog.
protected Handler addRequestLog(Server server, Handler handler, String name) {
if (getRequestLogFactory().isEnabled()) {
final RequestLogHandler requestLogHandler = new RequestLogHandler();
requestLogHandler.setRequestLog(getRequestLogFactory().build(name));
// server should own the request log's lifecycle since it's already started,
// the handler might not become managed in case of an error which would leave
// the request log stranded
server.addBean(requestLogHandler.getRequestLog(), true);
requestLogHandler.setHandler(handler);
return requestLogHandler;
}
return handler;
}
use of org.eclipse.jetty.server.handler.RequestLogHandler in project cloudstack by apache.
the class ServerDaemon method createHandlers.
private Pair<SessionHandler, HandlerCollection> createHandlers() {
final WebAppContext webApp = new WebAppContext();
webApp.setContextPath(contextPath);
webApp.setInitParameter("org.eclipse.jetty.servlet.Default.dirAllowed", "false");
// GZIP handler
final GzipHandler gzipHandler = new GzipHandler();
gzipHandler.addIncludedMimeTypes("text/html", "text/xml", "text/css", "text/plain", "text/javascript", "application/javascript", "application/json", "application/xml");
gzipHandler.setIncludedMethods("GET", "POST");
gzipHandler.setCompressionLevel(9);
gzipHandler.setHandler(webApp);
if (StringUtils.isEmpty(webAppLocation)) {
webApp.setWar(getShadedWarUrl());
} else {
webApp.setWar(webAppLocation);
}
// Request log handler
final RequestLogHandler log = new RequestLogHandler();
log.setRequestLog(createRequestLog());
// Redirect root context handler_war
MovedContextHandler rootRedirect = new MovedContextHandler();
rootRedirect.setContextPath("/");
rootRedirect.setNewContextURL(contextPath);
rootRedirect.setPermanent(true);
// Put rootRedirect at the end!
return new Pair<>(webApp.getSessionHandler(), new HandlerCollection(log, gzipHandler, rootRedirect));
}
use of org.eclipse.jetty.server.handler.RequestLogHandler in project structr by structr.
the class HttpService method initialize.
@Override
public boolean initialize(final StructrServices services) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
final LicenseManager licenseManager = services.getLicenseManager();
final boolean isTest = Services.isTesting();
String sourceJarName = getClass().getProtectionDomain().getCodeSource().getLocation().toString();
if (!isTest && StringUtils.stripEnd(sourceJarName, System.getProperty("file.separator")).endsWith("classes")) {
String jarFile = System.getProperty("jarFile");
if (StringUtils.isEmpty(jarFile)) {
throw new IllegalArgumentException(getClass().getName() + " was started in an environment where the classloader cannot determine the JAR file containing the main class.\n" + "Please specify the path to the JAR file in the parameter -DjarFile.\n" + "Example: -DjarFile=${project.build.directory}/${project.artifactId}-${project.version}.jar");
}
sourceJarName = jarFile;
}
// load configuration from properties file
maxIdleTime = Services.parseInt(System.getProperty("maxIdleTime"), 30000);
requestHeaderSize = Services.parseInt(System.getProperty("requestHeaderSize"), 8192);
if (Settings.Async.getValue()) {
logger.info("Running in asynchronous mode");
}
// other properties
final String keyStorePath = Settings.KeystorePath.getValue();
final String keyStorePassword = Settings.KeystorePassword.getValue();
final String contextPath = System.getProperty("contextPath", "/");
final boolean enableHttps = Settings.HttpsEnabled.getValue();
final boolean enableGzipCompression = Settings.GzipCompression.getValue();
final boolean logRequests = Settings.RequestLogging.getValue();
final String logPrefix = Settings.LogPrefix.getValue();
final String host = Settings.ApplicationHost.getValue();
final int httpsPort = Settings.HttpsPort.getValue();
boolean enableRewriteFilter = true;
// get current base path
String basePath = System.getProperty("home", Settings.getBasePath());
if (StringUtils.isEmpty(basePath)) {
// use cwd and, if that fails, /tmp as a fallback
basePath = System.getProperty("user.dir", "/tmp");
}
// create base directory if it does not exist
final File baseDir = new File(basePath);
if (!baseDir.exists()) {
baseDir.mkdirs();
}
server = new Server(Settings.HttpPort.getValue());
final ContextHandlerCollection contexts = new ContextHandlerCollection();
contexts.addHandler(new DefaultHandler());
final ServletContextHandler servletContext = new ServletContextHandler(server, contextPath, true, true);
if (enableGzipCompression) {
gzipHandler = new GzipHandler();
gzipHandler.setIncludedMimeTypes("text/html", "text/plain", "text/css", "text/javascript", "application/json");
gzipHandler.setInflateBufferSize(32768);
gzipHandler.setMinGzipSize(256);
gzipHandler.setCompressionLevel(9);
gzipHandler.setIncludedMethods("GET", "POST", "PUT", "HEAD", "DELETE");
gzipHandler.addIncludedPaths("/*");
gzipHandler.setDispatcherTypes(EnumSet.of(DispatcherType.REQUEST, DispatcherType.FORWARD, DispatcherType.ASYNC));
}
servletContext.setGzipHandler(gzipHandler);
final List<Connector> connectors = new LinkedList<>();
// create resource collection from base path & source JAR
try {
servletContext.setBaseResource(new ResourceCollection(Resource.newResource(basePath), JarResource.newJarResource(Resource.newResource(sourceJarName))));
} catch (Throwable t) {
logger.warn("Base resource {} not usable: {}", new Object[] { basePath, t.getMessage() });
}
// this is needed for the filters to work on the root context "/"
servletContext.addServlet("org.eclipse.jetty.servlet.DefaultServlet", "/");
servletContext.setInitParameter("org.eclipse.jetty.servlet.Default.dirAllowed", "false");
if (Settings.ConfigServletEnabled.getValue()) {
// configuration wizard entry point
servletContext.addServlet("org.structr.rest.servlet.ConfigServlet", "/structr/config/*");
}
// CMIS setup
if (Settings.CmisEnabled.getValue() && (licenseManager == null || licenseManager.isModuleLicensed("cmis"))) {
try {
servletContext.addEventListener(new CmisRepositoryContextListener());
final ServletHolder cmisAtomHolder = servletContext.addServlet(CmisAtomPubServlet.class.getName(), "/structr/cmis/atom/*");
cmisAtomHolder.setInitParameter("callContextHandler", BasicAuthCallContextHandler.class.getName());
cmisAtomHolder.setInitParameter("cmisVersion", "1.1");
final ServletHolder cmisBrowserHolder = servletContext.addServlet(CmisBrowserBindingServlet.class.getName(), "/structr/cmis/browser/*");
cmisBrowserHolder.setInitParameter("callContextHandler", BasicAuthCallContextHandler.class.getName());
cmisBrowserHolder.setInitParameter("cmisVersion", "1.1");
} catch (Throwable t) {
logger.warn("Cannot initialize CMIS servlet", t);
}
}
sessionCache = new DefaultSessionCache(servletContext.getSessionHandler());
if (licenseManager != null) {
final String hardwareId = licenseManager.getHardwareFingerprint();
DefaultSessionIdManager idManager = new DefaultSessionIdManager(server);
idManager.setWorkerName(hardwareId);
sessionCache.getSessionHandler().setSessionIdManager(idManager);
}
final StructrSessionDataStore sessionDataStore = new StructrSessionDataStore();
// sessionDataStore.setSavePeriodSec(60);
sessionCache.setSessionDataStore(sessionDataStore);
// sessionCache.setSaveOnCreate(true);
sessionCache.setSaveOnInactiveEviction(false);
sessionCache.setRemoveUnloadableSessions(true);
servletContext.getSessionHandler().setSessionCache(sessionCache);
if (enableRewriteFilter) {
final FilterHolder rewriteFilter = new FilterHolder(UrlRewriteFilter.class);
rewriteFilter.setInitParameter("confPath", "urlrewrite.xml");
servletContext.addFilter(rewriteFilter, "/*", EnumSet.of(DispatcherType.REQUEST, DispatcherType.FORWARD, DispatcherType.ASYNC));
}
contexts.addHandler(servletContext);
// enable request logging
if (logRequests) {
final String etcPath = basePath + "/etc";
final File etcDir = new File(etcPath);
if (!etcDir.exists()) {
etcDir.mkdir();
}
final String logbackConfFilePath = basePath + "/etc/logback-access.xml";
final File logbackConfFile = new File(logbackConfFilePath);
if (!logbackConfFile.exists()) {
// synthesize a logback accees log config file
List<String> config = new LinkedList<>();
config.add("<configuration>");
config.add(" <appender name=\"FILE\" class=\"ch.qos.logback.core.rolling.RollingFileAppender\">");
config.add(" <rollingPolicy class=\"ch.qos.logback.core.rolling.TimeBasedRollingPolicy\">");
config.add(" <fileNamePattern>logs/" + logPrefix + "-%d{yyyy_MM_dd}.request.log.zip</fileNamePattern>");
config.add(" </rollingPolicy>");
config.add(" <encoder>");
config.add(" <charset>UTF-8</charset>");
config.add(" <pattern>%h %l %u %t \"%r\" %s %b %n%fullRequest%n%n%fullResponse</pattern>");
config.add(" </encoder>");
config.add(" </appender>");
config.add(" <appender-ref ref=\"FILE\" />");
config.add("</configuration>");
try {
logbackConfFile.createNewFile();
FileUtils.writeLines(logbackConfFile, "UTF-8", config);
} catch (IOException ioex) {
logger.warn("Unable to write logback configuration.", ioex);
}
}
final FilterHolder loggingFilter = new FilterHolder(TeeFilter.class);
servletContext.addFilter(loggingFilter, "/*", EnumSet.of(DispatcherType.REQUEST, Settings.Async.getValue() ? DispatcherType.ASYNC : DispatcherType.FORWARD));
loggingFilter.setInitParameter("includes", "");
final RequestLogHandler requestLogHandler = new RequestLogHandler();
final String logPath = basePath + "/logs";
final File logDir = new File(logPath);
// Create logs directory if not existing
if (!logDir.exists()) {
logDir.mkdir();
}
final RequestLogImpl requestLog = new RequestLogImpl();
requestLog.setName("REQUESTLOG");
requestLog.start();
requestLogHandler.setRequestLog(requestLog);
final HandlerCollection handlers = new HandlerCollection();
handlers.setHandlers(new Handler[] { contexts, requestLogHandler });
server.setHandler(handlers);
} else {
server.setHandler(contexts);
}
final List<ContextHandler> resourceHandler = collectResourceHandlers();
for (ContextHandler contextHandler : resourceHandler) {
contexts.addHandler(contextHandler);
}
final Map<String, ServletHolder> servlets = collectServlets(licenseManager);
// add servlet elements
int position = 1;
for (Map.Entry<String, ServletHolder> servlet : servlets.entrySet()) {
final ServletHolder servletHolder = servlet.getValue();
final String path = servlet.getKey();
servletHolder.setInitOrder(position++);
logger.info("Adding servlet {} for {}", new Object[] { servletHolder, path });
servletContext.addServlet(servletHolder, path);
}
contexts.addHandler(servletContext);
if (StringUtils.isNotBlank(host) && Settings.HttpPort.getValue() > -1) {
httpConfig = new HttpConfiguration();
httpConfig.setSecureScheme("https");
httpConfig.setSecurePort(httpsPort);
// httpConfig.setOutputBufferSize(8192);
httpConfig.setRequestHeaderSize(requestHeaderSize);
final ServerConnector httpConnector = new ServerConnector(server, new HttpConnectionFactory(httpConfig));
httpConnector.setHost(host);
httpConnector.setPort(Settings.HttpPort.getValue());
connectors.add(httpConnector);
} else {
logger.warn("Unable to configure HTTP server port, please make sure that {} and {} are set correctly in structr.conf.", Settings.ApplicationHost.getKey(), Settings.HttpPort.getKey());
}
if (enableHttps) {
if (httpsPort > -1 && keyStorePath != null && !keyStorePath.isEmpty() && keyStorePassword != null) {
httpsConfig = new HttpConfiguration(httpConfig);
httpsConfig.addCustomizer(new SecureRequestCustomizer());
final SslContextFactory sslContextFactory = new SslContextFactory();
sslContextFactory.setKeyStorePath(keyStorePath);
sslContextFactory.setKeyStorePassword(keyStorePassword);
final ServerConnector https = new ServerConnector(server, new SslConnectionFactory(sslContextFactory, "http/1.1"), new HttpConnectionFactory(httpsConfig));
https.setPort(httpsPort);
https.setIdleTimeout(500000);
https.setHost(host);
https.setPort(httpsPort);
connectors.add(https);
} else {
logger.warn("Unable to configure SSL, please make sure that {}, {} and {} are set correctly in structr.conf.", new Object[] { Settings.HttpsPort.getKey(), Settings.KeystorePath.getKey(), Settings.KeystorePassword.getKey() });
}
}
if (!connectors.isEmpty()) {
server.setConnectors(connectors.toArray(new Connector[0]));
} else {
logger.error("No connectors configured, aborting.");
System.exit(0);
}
server.setStopTimeout(1000);
server.setStopAtShutdown(true);
return true;
}
Aggregations