首页 » HTTP » 正文

内嵌Jetty打印HTTP请求日志

在互联网在线服务中, 使用内嵌Jetty是比较常见的, 内嵌的Jetty管理方便, 启动简单, 可以与你的Web应用无缝的结合, 需要的时候还可以做一些定制化, 在使用内嵌Jetty, 一个非常常见的需求就是打印HTTP请求日志, 类似Tomcat的存取日志一样, 由于Jetty的文档并不是很多, Google又不能使用, 因此, 把打印日志的代码总结在这里, 供大家参考:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
final Logger logger = Logger.getLogger(ServerMain.class);
ConfigLoader.loadProperties("config/");
logger.info("ServerMain log init success!");
final Server server = new Server();
SocketConnector connector = new SocketConnector();
connector.setMaxIdleTime(1000 * 60 * 60);
QueuedThreadPool queuedThreadPool = new QueuedThreadPool();  
queuedThreadPool.setMinThreads(5);  
queuedThreadPool.setMaxThreads(1000);
connector.setThreadPool(queuedThreadPool);
connector.setSoLingerTime(-1);
String port=ConfigLoader.getProperty("port");
connector.setPort(Integer.parseInt(port));
server.setConnectors(new Connector[] {
    connector
});
WebAppContext webapp = new WebAppContext();
webapp.setServer(server);
webapp.setContextPath("/");
webapp.setWar("config");

// 增加打印日志的Handler
HandlerCollection handlers = new HandlerCollection();
RequestLogHandler requestLogHandler = new RequestLogHandler();
handlers.setHandlers(new Handler[]{requestLogHandler,webapp});
server.setHandler(handlers);

// 设置打印日志的Handler
NCSARequestLog requestLog = new NCSARequestLog();
requestLog.setFilename( "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.setRequestLog(requestLog);

Runtime.getRuntime().addShutdownHook(new Thread() {
    @Override
    public void run() {
        try {
            server.stop();
            server.join();
        } catch (Exception e) {
            e.printStackTrace();
            System.exit(100);
        }
    }
});
try {
    server.start();
    while (server.isRunning()) {
        Thread.sleep(5000);
    }
} catch (Exception e) {
    e.printStackTrace();
}