mirror of https://github.com/apache/cloudstack.git
86 lines
3.0 KiB
Java
86 lines
3.0 KiB
Java
//
|
|
// Licensed to the Apache Software Foundation (ASF) under one
|
|
// or more contributor license agreements. See the NOTICE file
|
|
// distributed with this work for additional information
|
|
// regarding copyright ownership. The ASF licenses this file
|
|
// to you under the Apache License, Version 2.0 (the
|
|
// "License"); you may not use this file except in compliance
|
|
// with the License. You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing,
|
|
// software distributed under the License is distributed on an
|
|
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
// KIND, either express or implied. See the License for the
|
|
// specific language governing permissions and limitations
|
|
// under the License.
|
|
//
|
|
package org.apache.cloudstack;
|
|
|
|
import com.cloud.api.ApiServlet;
|
|
import com.cloud.utils.StringUtils;
|
|
import org.eclipse.jetty.server.NCSARequestLog;
|
|
import org.eclipse.jetty.server.Request;
|
|
import org.eclipse.jetty.server.Response;
|
|
import org.eclipse.jetty.util.DateCache;
|
|
import org.eclipse.jetty.util.component.LifeCycle;
|
|
|
|
import java.net.InetAddress;
|
|
import java.util.Locale;
|
|
import java.util.TimeZone;
|
|
|
|
import static org.apache.commons.configuration.DataConfiguration.DEFAULT_DATE_FORMAT;
|
|
|
|
public class ACSRequestLog extends NCSARequestLog {
|
|
private static final ThreadLocal<StringBuilder> buffers =
|
|
ThreadLocal.withInitial(() -> new StringBuilder(256));
|
|
|
|
private final DateCache dateCache;
|
|
|
|
public ACSRequestLog() {
|
|
super();
|
|
|
|
TimeZone timeZone = TimeZone.getTimeZone("GMT");
|
|
Locale locale = Locale.getDefault();
|
|
dateCache = new DateCache(DEFAULT_DATE_FORMAT, locale, timeZone);
|
|
}
|
|
|
|
@Override
|
|
public void log(Request request, Response response) {
|
|
String requestURI = StringUtils.cleanString(request.getOriginalURI());
|
|
try {
|
|
StringBuilder sb = buffers.get();
|
|
sb.setLength(0);
|
|
|
|
InetAddress remoteAddress = ApiServlet.getClientAddress(request);
|
|
sb.append(remoteAddress.getHostAddress())
|
|
.append(" - - [")
|
|
.append(dateCache.format(request.getTimeStamp()))
|
|
.append("] \"")
|
|
.append(request.getMethod())
|
|
.append(" ")
|
|
.append(requestURI)
|
|
.append(" ")
|
|
.append(request.getProtocol())
|
|
.append("\" ")
|
|
.append(response.getStatus())
|
|
.append(" ")
|
|
.append(response.getHttpChannel().getBytesWritten()) // apply filter here?
|
|
.append(" \"-\" \"")
|
|
.append(request.getHeader("User-Agent"))
|
|
.append("\"");
|
|
|
|
write(sb.toString());
|
|
} catch (Exception e) {
|
|
LOG.warn("Unable to log request", e);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
protected void stop(LifeCycle lifeCycle) throws Exception {
|
|
buffers.remove();
|
|
super.stop(lifeCycle);
|
|
}
|
|
}
|