|
19 | 19 |
|
20 | 20 | package org.elasticsearch.index;
|
21 | 21 |
|
| 22 | +import com.fasterxml.jackson.core.io.JsonStringEncoder; |
22 | 23 | import org.apache.logging.log4j.LogManager;
|
23 | 24 | import org.apache.logging.log4j.Logger;
|
24 | 25 | import org.elasticsearch.common.Strings;
|
|
32 | 33 | import org.elasticsearch.search.internal.SearchContext;
|
33 | 34 | import org.elasticsearch.tasks.Task;
|
34 | 35 |
|
| 36 | +import java.nio.charset.Charset; |
35 | 37 | import java.util.Collections;
|
36 | 38 | import java.util.HashMap;
|
37 | 39 | import java.util.Map;
|
38 | 40 | import java.util.concurrent.TimeUnit;
|
39 | 41 | import java.util.stream.Stream;
|
40 | 42 |
|
41 | 43 | public final class SearchSlowLog implements SearchOperationListener {
|
| 44 | + private static final Charset UTF_8 = Charset.forName("UTF-8"); |
| 45 | + |
42 | 46 | private long queryWarnThreshold;
|
43 | 47 | private long queryInfoThreshold;
|
44 | 48 | private long queryDebugThreshold;
|
@@ -169,13 +173,13 @@ private static Map<String, Object> prepareMap(SearchContext context, long tookIn
|
169 | 173 | } else {
|
170 | 174 | messageFields.put("total_hits", "-1");
|
171 | 175 | }
|
172 |
| - messageFields.put("stats", ESLogMessage.escapeJson(ESLogMessage.asJsonArray( |
| 176 | + messageFields.put("stats", escapeJson(ESLogMessage.asJsonArray( |
173 | 177 | context.groupStats() != null ? context.groupStats().stream() : Stream.empty())));
|
174 | 178 | messageFields.put("search_type", context.searchType());
|
175 | 179 | messageFields.put("total_shards", context.numberOfShards());
|
176 | 180 |
|
177 | 181 | if (context.request().source() != null) {
|
178 |
| - String source = ESLogMessage.escapeJson(context.request().source().toString(FORMAT_PARAMS)); |
| 182 | + String source = escapeJson(context.request().source().toString(FORMAT_PARAMS)); |
179 | 183 |
|
180 | 184 | messageFields.put("source", source);
|
181 | 185 | } else {
|
@@ -221,6 +225,11 @@ private static String message(SearchContext context, long tookInNanos) {
|
221 | 225 | }
|
222 | 226 | return sb.toString();
|
223 | 227 | }
|
| 228 | + |
| 229 | + private static String escapeJson(String text) { |
| 230 | + byte[] sourceEscaped = JsonStringEncoder.getInstance().quoteAsUTF8(text); |
| 231 | + return new String(sourceEscaped, UTF_8); |
| 232 | + } |
224 | 233 | }
|
225 | 234 |
|
226 | 235 | private void setQueryWarnThreshold(TimeValue warnThreshold) {
|
|
0 commit comments