comparison src/org/eclipse/jetty/server/AsyncNCSARequestLog.java @ 802:3428c60d7cfc

replace jetty jars with source
author Franklin Schmidt <fschmidt@gmail.com>
date Wed, 07 Sep 2016 21:15:48 -0600
parents
children 8e9db0bbf4f9
comparison
equal deleted inserted replaced
801:6a21393191c1 802:3428c60d7cfc
1 //
2 // ========================================================================
3 // Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd.
4 // ------------------------------------------------------------------------
5 // All rights reserved. This program and the accompanying materials
6 // are made available under the terms of the Eclipse Public License v1.0
7 // and Apache License v2.0 which accompanies this distribution.
8 //
9 // The Eclipse Public License is available at
10 // http://www.eclipse.org/legal/epl-v10.html
11 //
12 // The Apache License v2.0 is available at
13 // http://www.opensource.org/licenses/apache2.0.php
14 //
15 // You may elect to redistribute this code under either of these licenses.
16 // ========================================================================
17 //
18
19 package org.eclipse.jetty.server;
20
21 import org.eclipse.jetty.util.BlockingArrayQueue;
22 import org.eclipse.jetty.util.log.Log;
23 import org.eclipse.jetty.util.log.Logger;
24
25 import java.io.IOException;
26 import java.util.concurrent.BlockingQueue;
27 import java.util.concurrent.LinkedBlockingQueue;
28 import java.util.concurrent.TimeUnit;
29
30
31 /* ------------------------------------------------------------ */
32 /**
33 * An asynchronously writing NCSA Request Log
34 */
35 public class AsyncNCSARequestLog extends NCSARequestLog
36 {
37 private static final Logger LOG = Log.getLogger(AsyncNCSARequestLog.class);
38 private final BlockingQueue<String> _queue;
39 private transient WriterThread _thread;
40 private boolean _warnedFull;
41
42 public AsyncNCSARequestLog()
43 {
44 this(null,null);
45 }
46
47 public AsyncNCSARequestLog(BlockingQueue<String> queue)
48 {
49 this(null,queue);
50 }
51
52 public AsyncNCSARequestLog(String filename)
53 {
54 this(filename,null);
55 }
56
57 public AsyncNCSARequestLog(String filename,BlockingQueue<String> queue)
58 {
59 super(filename);
60 if (queue==null)
61 queue=new BlockingArrayQueue<String>(1024);
62 _queue=queue;
63 }
64
65 private class WriterThread extends Thread
66 {
67 WriterThread()
68 {
69 setName("AsyncNCSARequestLog@"+Integer.toString(AsyncNCSARequestLog.this.hashCode(),16));
70 }
71
72 @Override
73 public void run()
74 {
75 while (isRunning())
76 {
77 try
78 {
79 String log = _queue.poll(10,TimeUnit.SECONDS);
80 if (log!=null)
81 AsyncNCSARequestLog.super.write(log);
82
83 while(!_queue.isEmpty())
84 {
85 log=_queue.poll();
86 if (log!=null)
87 AsyncNCSARequestLog.super.write(log);
88 }
89 }
90 catch (IOException e)
91 {
92 LOG.warn(e);
93 }
94 catch (InterruptedException e)
95 {
96 LOG.ignore(e);
97 }
98 }
99 }
100 }
101
102 @Override
103 protected synchronized void doStart() throws Exception
104 {
105 super.doStart();
106 _thread = new WriterThread();
107 _thread.start();
108 }
109
110 @Override
111 protected void doStop() throws Exception
112 {
113 _thread.interrupt();
114 _thread.join();
115 super.doStop();
116 _thread=null;
117 }
118
119 @Override
120 protected void write(String log) throws IOException
121 {
122 if (!_queue.offer(log))
123 {
124 if (_warnedFull)
125 LOG.warn("Log Queue overflow");
126 _warnedFull=true;
127 }
128 }
129
130 }