Can't put the RequestLogHandler after the DefaultHandler.
It will never be called, as DefaultHandler is the fallback for all
unhandled prior requests. :-)
Best if you setup a hierarchy for your handlers instead.
server
+ -- RequestLogHandler
+ -- ResourceHandler
+ -- DefaultHandler
Like this ...
https://gist.github.com/joakime/27c42782c9a2712a1010
package jetty;
import java.io.File;
import java.net.InetSocketAddress;
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.handler.DefaultHandler;
import org.eclipse.jetty.server.handler.HandlerList;
import org.eclipse.jetty.server.handler.RequestLogHandler;
import org.eclipse.jetty.server.handler.ResourceHandler;
public class RequestLogging
{
public static void main(String[] args) throws Exception
{
Server server = new Server();
ServerConnector connector = new ServerConnector(server);
connector.setHost("localhost");
connector.setPort(8765);
server.addConnector(connector);
// Setup directories and file references
File userHomeDir = new File(System.getProperty("user.home"));
File tmpDir = new File(userHomeDir, "tmp");
File baseResourceDir = new File(tmpDir, "docroot");
baseResourceDir.mkdirs();
File logFile = new File(tmpDir, "access.log");
logFile.getParentFile().mkdirs();
// Create resource handler (for serving static content)
ResourceHandler resourceHandler = new ResourceHandler();
resourceHandler.setDirectoriesListed(true);
resourceHandler.setWelcomeFiles(new String[] { "index.html" });
resourceHandler.setResourceBase(baseResourceDir.getAbsolutePath());
// Create request log handler (access log)
NCSARequestLog requestLog = new
NCSARequestLog(logFile.getAbsolutePath());
requestLog.setExtended(true);
RequestLogHandler requestLogHandler = new RequestLogHandler();
requestLogHandler.setRequestLog(requestLog);
requestLog.setAppend(true);
// Create main handler list (the meat of what is being done)
HandlerList mainHandlers = new HandlerList();
mainHandlers.addHandler(resourceHandler);
// default for all prior unhandled requests
mainHandlers.addHandler(new DefaultHandler());
// Make main handler list be tracked by request logging
requestLogHandler.setHandler(mainHandlers);
// Setup top level handler list, what the server uses
HandlerList topLevelHandlers = new HandlerList();
// NOTE: If you want some handlers to exist, and not be tracked by
// the request log handler (such as rewrites), then declare them
// outside of the scop of the requestLogHandler.
// Example: baseHandler.addHandler(rewriteHandler);
topLevelHandlers.addHandler(requestLogHandler);
// Add top level handler list to server
server.setHandler(topLevelHandlers);
server.start();
server.join();
}
}
--
Joakim Erdfelt <[email protected]>
webtide.com <http://www.webtide.com/> - intalio.com/jetty
Expert advice, services and support from from the Jetty & CometD experts
eclipse.org/jetty - cometd.org
On Tue, Jul 1, 2014 at 3:23 AM, Robert Krüger <[email protected]> wrote:
> I am trying to get a jetty instance, that I set up programmatically,
> to write an access log. This is the code I use:
>
> public class FileServer
> {
> public static void main(String[] args) throws Exception
> {
> final InetSocketAddress serverAddress = new
> InetSocketAddress("localhost", 8765);
> Server server = new Server(serverAddress);
>
> ResourceHandler resourceHandler = new ResourceHandler();
> resourceHandler.setDirectoriesListed(true);
> resourceHandler.setWelcomeFiles(new String[]{"index.html"});
>
> resourceHandler.setResourceBase("/Users/krueger/tmp");
>
> final File logFile = new
> File("/Users/krueger/Library/Logs/StreamingTest/access.log");
> logFile.getParentFile().mkdirs();
> final NCSARequestLog requestLog = new
> NCSARequestLog(logFile.getAbsolutePath());
> requestLog.setExtended(true);
> final RequestLogHandler requestLogHandler = new RequestLogHandler();
> requestLogHandler.setRequestLog(requestLog);
> requestLog.setAppend(true);
>
> HandlerList handlers = new HandlerList();
> handlers.setHandlers(new Handler[] { resourceHandler, new
> DefaultHandler(), requestLogHandler });
> server.setHandler(handlers);
>
> server.start();
> server.join();
> }
> }
>
> The server works as expected and the log file is created but no
> requests are logged. The file remains empty. What am I missing?
>
> Thanks in advance,
>
> Robert
> _______________________________________________
> jetty-users mailing list
> [email protected]
> To change your delivery options, retrieve your password, or unsubscribe
> from this list, visit
> https://dev.eclipse.org/mailman/listinfo/jetty-users
>
_______________________________________________
jetty-users mailing list
[email protected]
To change your delivery options, retrieve your password, or unsubscribe from
this list, visit
https://dev.eclipse.org/mailman/listinfo/jetty-users