1
1
package net .rakugakibox .spring .boot .logback .access .undertow ;
2
2
3
- import java .util .HashMap ;
4
- import java .util .Map ;
5
- import java .util .concurrent .TimeUnit ;
6
- import javax .servlet .http .HttpServletRequest ;
7
- import javax .servlet .http .HttpServletResponse ;
8
-
3
+ import ch .qos .logback .access .pattern .AccessConverter ;
4
+ import ch .qos .logback .access .spi .AccessEvent ;
9
5
import io .undertow .server .HttpServerExchange ;
10
6
import io .undertow .servlet .handlers .ServletRequestContext ;
11
7
import io .undertow .util .HeaderMap ;
12
8
import io .undertow .util .HeaderValues ;
13
9
import net .rakugakibox .spring .boot .logback .access .AbstractLogbackAccessEvent ;
10
+ import net .rakugakibox .spring .boot .logback .access .AbstractOverridenAttribute ;
11
+ import javax .servlet .RequestDispatcher ;
12
+ import javax .servlet .http .HttpServletRequest ;
13
+ import javax .servlet .http .HttpServletResponse ;
14
+ import java .util .HashMap ;
15
+ import java .util .Map ;
16
+ import java .util .Optional ;
17
+ import java .util .concurrent .TimeUnit ;
14
18
15
19
/**
16
20
* The Logback-access event for Undertow.
17
21
*/
18
22
public class UndertowLogbackAccessEvent extends AbstractLogbackAccessEvent {
19
23
24
+ private final RequestURI requestURI = new RequestURI ();
25
+
26
+ private final QueryString queryString = new QueryString ();
27
+
20
28
/**
21
29
* Constructs an instance.
22
30
*
@@ -48,6 +56,26 @@ private static HttpServletResponse extractHttpServletResponse(HttpServerExchange
48
56
return (HttpServletResponse ) context .getServletResponse ();
49
57
}
50
58
59
+ @ Override
60
+ public String getRequestURI () {
61
+ return requestURI .get ();
62
+ }
63
+
64
+ @ Override
65
+ public String getQueryString () {
66
+ return queryString .get ();
67
+ }
68
+
69
+ @ Override
70
+ public String getRequestURL () {
71
+ return getMethod () +
72
+ AccessConverter .SPACE_CHAR +
73
+ getRequestURI () +
74
+ getQueryString () +
75
+ AccessConverter .SPACE_CHAR +
76
+ getProtocol ();
77
+ }
78
+
51
79
/**
52
80
* The server adapter.
53
81
*/
@@ -67,7 +95,6 @@ private ServerAdapter(HttpServerExchange exchange) {
67
95
this .exchange = exchange ;
68
96
}
69
97
70
- /** {@inheritDoc} */
71
98
@ Override
72
99
public long getRequestTimestamp () {
73
100
long currentTimeMillis = System .currentTimeMillis ();
@@ -76,19 +103,16 @@ public long getRequestTimestamp() {
76
103
return currentTimeMillis - TimeUnit .NANOSECONDS .toMillis (nanoTime - requestStartTime );
77
104
}
78
105
79
- /** {@inheritDoc} */
80
106
@ Override
81
107
public int getStatusCode () {
82
108
return exchange .getStatusCode ();
83
109
}
84
110
85
- /** {@inheritDoc} */
86
111
@ Override
87
112
public long getContentLength () {
88
113
return exchange .getResponseBytesSent ();
89
114
}
90
115
91
- /** {@inheritDoc} */
92
116
@ Override
93
117
public Map <String , String > buildResponseHeaderMap () {
94
118
Map <String , String > result = new HashMap <>();
@@ -101,4 +125,38 @@ public Map<String, String> buildResponseHeaderMap() {
101
125
102
126
}
103
127
128
+ private class RequestURI extends AbstractOverridenAttribute <String > {
129
+
130
+ @ Override
131
+ protected Optional <String > evaluateValueToOverride () {
132
+ return Optional .of (UndertowLogbackAccessEvent .this )
133
+ .map (AccessEvent ::getRequest )
134
+ .map (request -> (String ) request .getAttribute (RequestDispatcher .FORWARD_REQUEST_URI ));
135
+ }
136
+
137
+ @ Override
138
+ protected String getOriginalValue () {
139
+ return UndertowLogbackAccessEvent .super .getRequestURI ();
140
+ }
141
+
142
+ }
143
+
144
+ private class QueryString extends AbstractOverridenAttribute <String > {
145
+
146
+ @ Override
147
+ protected Optional <String > evaluateValueToOverride () {
148
+ return Optional .of (UndertowLogbackAccessEvent .this )
149
+ .map (AccessEvent ::getRequest )
150
+ .map (request -> (String ) request .getAttribute (RequestDispatcher .FORWARD_QUERY_STRING ))
151
+ .filter (query -> !query .isEmpty ())
152
+ .map (query -> AccessConverter .QUESTION_CHAR + query );
153
+ }
154
+
155
+ @ Override
156
+ protected String getOriginalValue () {
157
+ return UndertowLogbackAccessEvent .super .getQueryString ();
158
+ }
159
+
160
+ }
161
+
104
162
}
0 commit comments