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

Reply via email to