Skip to content

Commit 62d9600

Browse files
committed
Added new fields to request context and fixed a couple of issues with log formatter for #116
1 parent c70c4dc commit 62d9600

File tree

2 files changed

+54
-14
lines changed

2 files changed

+54
-14
lines changed

aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/ApacheCombinedServletLogFormatter.java

Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@
1111
import javax.ws.rs.core.SecurityContext;
1212

1313
import java.text.SimpleDateFormat;
14+
import java.time.Instant;
1415
import java.util.Calendar;
16+
import java.util.Date;
1517
import java.util.Locale;
1618

1719
import static com.amazonaws.serverless.proxy.RequestReader.API_GATEWAY_CONTEXT_PROPERTY;
@@ -36,29 +38,37 @@ public ApacheCombinedServletLogFormatter() {
3638
public String format(ContainerRequestType servletRequest, ContainerResponseType servletResponse, SecurityContext ctx) {
3739
//LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
3840
StringBuilder logLineBuilder = new StringBuilder();
41+
ApiGatewayRequestContext gatewayContext = (ApiGatewayRequestContext)servletRequest.getAttribute(API_GATEWAY_CONTEXT_PROPERTY);
3942

4043
// %h
4144
logLineBuilder.append(servletRequest.getRemoteAddr());
4245
logLineBuilder.append(" ");
4346

4447
// %l
45-
if (servletRequest instanceof AwsProxyHttpServletRequest && servletRequest.getAttribute(API_GATEWAY_CONTEXT_PROPERTY) != null) {
46-
ApiGatewayRequestContext gatewayContext = (ApiGatewayRequestContext)servletRequest.getAttribute(API_GATEWAY_CONTEXT_PROPERTY);
47-
logLineBuilder.append(gatewayContext.getIdentity().getUserArn());
48-
logLineBuilder.append(" ");
48+
if (gatewayContext != null) {
49+
if (gatewayContext.getIdentity().getUserArn() != null) {
50+
logLineBuilder.append(gatewayContext.getIdentity().getUserArn());
51+
} else {
52+
logLineBuilder.append("-");
53+
}
4954
} else {
50-
logLineBuilder.append("- ");
55+
logLineBuilder.append("-");
5156
}
57+
logLineBuilder.append(" ");
5258

5359
// %u
54-
if (ctx != null) {
60+
if (ctx != null && ctx.getUserPrincipal().getName() != null) {
5561
logLineBuilder.append(ctx.getUserPrincipal().getName());
62+
logLineBuilder.append(" ");
5663
}
57-
logLineBuilder.append(" ");
5864

5965

6066
// %t
61-
logLineBuilder.append(dateFormat.format(Calendar.getInstance().getTime()));
67+
if (gatewayContext != null) {
68+
logLineBuilder.append(dateFormat.format(Date.from(Instant.ofEpochMilli(gatewayContext.getRequestTimeEpoch()))));
69+
} else {
70+
logLineBuilder.append(dateFormat.format(Calendar.getInstance().getTime()));
71+
}
6272
logLineBuilder.append(" ");
6373

6474
// %r
@@ -68,7 +78,7 @@ public String format(ContainerRequestType servletRequest, ContainerResponseType
6878
logLineBuilder.append(servletRequest.getPathInfo());
6979
logLineBuilder.append(" ");
7080
logLineBuilder.append(servletRequest.getProtocol());
71-
logLineBuilder.append(" \" ");
81+
logLineBuilder.append("\" ");
7282

7383
// %>s
7484
logLineBuilder.append(servletResponse.getStatus());
@@ -89,15 +99,23 @@ public String format(ContainerRequestType servletRequest, ContainerResponseType
8999

90100
// \"%{Referer}i\"
91101
logLineBuilder.append("\"");
92-
logLineBuilder.append(servletRequest.getHeader("referer"));
93-
logLineBuilder.append("\"");
102+
if (servletRequest.getHeader("referer") != null) {
103+
logLineBuilder.append(servletRequest.getHeader("referer"));
104+
} else {
105+
logLineBuilder.append("-");
106+
}
107+
logLineBuilder.append("\" ");
94108

95109
// \"%{User-agent}i\"
96110
logLineBuilder.append("\"");
97-
logLineBuilder.append(servletRequest.getHeader("user-agent"));
98-
logLineBuilder.append("\"");
111+
if (servletRequest.getHeader("user-agent") != null) {
112+
logLineBuilder.append(servletRequest.getHeader("user-agent"));
113+
} else {
114+
logLineBuilder.append("-");
115+
}
116+
logLineBuilder.append("\" ");
99117

100-
logLineBuilder.append(" combined");
118+
logLineBuilder.append("combined");
101119

102120

103121
return logLineBuilder.toString();

aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/ApiGatewayRequestContext.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ public class ApiGatewayRequestContext {
4444
private String stage;
4545
private String path;
4646
private String protocol;
47+
private String requestTime;
48+
private long requestTimeEpoch;
4749

4850

4951
//-------------------------------------------------------------
@@ -157,4 +159,24 @@ public String getProtocol() {
157159
public void setProtocol(String protocol) {
158160
this.protocol = protocol;
159161
}
162+
163+
164+
public String getRequestTime() {
165+
return requestTime;
166+
}
167+
168+
169+
public void setRequestTime(String requestTime) {
170+
this.requestTime = requestTime;
171+
}
172+
173+
174+
public long getRequestTimeEpoch() {
175+
return requestTimeEpoch;
176+
}
177+
178+
179+
public void setRequestTimeEpoch(long requestTimeEpoch) {
180+
this.requestTimeEpoch = requestTimeEpoch;
181+
}
160182
}

0 commit comments

Comments
 (0)