I want to log all soap requests to my server. The server instance is an embedded jetty server.
Is there a way to setup a handler to do this. I have access to the web.xml file
You'll want the following on your embedded jetty startup...
You'll be using ...
CustomRequestLog
(which has syntax for it's output)RequestLog.Writer
to specify where that output will go.Server.setRequestLog(RequestLog)
with your configuration.You will not use the old RequestLogHandler
from Jetty 9 days,
as that class was incapable of logging any requests that did not dispatch through that handler. (eg: errors, bad requests, requests without paths, requests that don't match a configured context path, etc)
Both of the below examples are snippets from the jetty-example project at:
Slf4jRequestLogWriter requestLoggingWriter = new Slf4jRequestLogWriter();
requestLoggingWriter.setLoggerName("examples.requests");
RequestLog requestLog = new CustomRequestLog(requestLoggingWriter,
CustomRequestLog.EXTENDED_NCSA_FORMAT);
server.setRequestLog(requestLog);
You can use your logging library of choice (just have slf4j route to your logging library), and output those logging events anywhere your logging library supports (file w/overwrite, file w/append, file w/rollover, email, database, unix system logs, etc)
AsyncRequestLogWriter requestLogWriter = new AsyncRequestLogWriter();
requestLogWriter.setAppend(true);
requestLogWriter.setFilename("/var/web/logs/request.log");
requestLogWriter.setRetainDays(1);
RequestLog requestLog = new CustomRequestLog(requestLogWriter,
CustomRequestLog.EXTENDED_NCSA_FORMAT);
server.setRequestLog(requestLog);
This is for Jetty 9
HandlerCollection handlers = new HandlerCollection();
ContextHandlerCollection contexts = new ContextHandlerCollection();
// your context specific handlers are added to "contexts" here
server.setHandler(handlers);
NCSARequestLog requestLog = new NCSARequestLog();
requestLog.setFilename("/path/to/my/logs/yyyy_mm_dd.request.log");
requestLog.setFilenameDateFormat("yyyy_MM_dd");
requestLog.setRetainDays(90);
requestLog.setAppend(true);
requestLog.setExtended(true);
requestLog.setLogCookies(false);
requestLog.setLogTimeZone("GMT");
RequestLogHandler requestLogHandler = new RequestLogHandler();
requestLogHandler.setRequestLog(requestLog);
handlers.addHandler(requestLogHandler);