1111import javax .ws .rs .core .SecurityContext ;
1212
1313import java .text .SimpleDateFormat ;
14+ import java .time .Instant ;
1415import java .util .Calendar ;
16+ import java .util .Date ;
1517import java .util .Locale ;
1618
1719import 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 ();
0 commit comments