|
1 | 1 | package datadog.trace.logging.simplelogger; |
2 | 2 |
|
3 | | -import static datadog.trace.util.Strings.escapeToJson; |
| 3 | +// import static datadog.trace.util.Strings.escapeToJson; |
4 | 4 |
|
| 5 | +import datadog.json.JsonWriter; |
5 | 6 | import datadog.trace.logging.LogLevel; |
6 | 7 | import datadog.trace.logging.LoggerHelper; |
| 8 | +import java.util.Arrays; |
| 9 | +import java.util.Iterator; |
| 10 | +import java.util.List; |
7 | 11 | import org.slf4j.Marker; |
8 | 12 |
|
9 | 13 | /** |
@@ -143,83 +147,63 @@ void logJson( |
143 | 147 | String threadName, |
144 | 148 | String message, |
145 | 149 | Throwable t) { |
146 | | - StringBuilder buf = new StringBuilder(32); |
147 | 150 |
|
148 | | - buf.append("{"); |
149 | | - embedJson(buf, "origin", "dd.trace", true); |
| 151 | + JsonWriter writer = new JsonWriter(); |
| 152 | + writer.beginObject(); |
| 153 | + writer.name("origin").value("dd.trace"); |
150 | 154 |
|
151 | 155 | if (timeMillis >= 0 && settings.showDateTime) { |
152 | | - embedJsonKey(buf, "date"); |
| 156 | + writer.name("date"); |
| 157 | + StringBuilder buf = new StringBuilder(32); |
153 | 158 | settings.dateTimeFormatter.appendFormattedDate(buf, timeMillis, startTimeMillis); |
154 | | - buf.append("\","); |
| 159 | + writer.value(buf.toString()); |
155 | 160 | } |
156 | 161 |
|
157 | 162 | if (settings.showThreadName && threadName != null) { |
158 | | - embedJson(buf, "logger.thread_name", threadName, true); |
| 163 | + writer.name("logger.thread_name").value(threadName); |
159 | 164 | } |
160 | 165 |
|
161 | | - embedJsonKey(buf, "level"); |
| 166 | + writer.name("level"); |
162 | 167 |
|
163 | 168 | if (settings.warnLevelString != null && level == LogLevel.WARN) { |
164 | | - embedJsonValue(buf, wrappedValueWithBracketsIfRequested(settings.warnLevelString), true); |
| 169 | + writer.value(wrappedValueWithBracketsIfRequested(settings.warnLevelString)); |
165 | 170 | } else if (marker != null) { |
166 | | - embedJsonValue(buf, wrappedValueWithBracketsIfRequested(marker.getName()), true); |
| 171 | + writer.value(wrappedValueWithBracketsIfRequested(marker.getName())); |
167 | 172 | } else { |
168 | | - embedJsonValue(buf, wrappedValueWithBracketsIfRequested(level.name()), true); |
| 173 | + writer.value(wrappedValueWithBracketsIfRequested(level.name())); |
169 | 174 | } |
170 | 175 |
|
171 | 176 | if (!logName.isEmpty()) { |
172 | | - embedJson(buf, "logger.name", logName, true); |
| 177 | + writer.name("logger.name").value(logName); |
173 | 178 | } |
174 | | - embedJson(buf, "message", message, false); |
| 179 | + writer.name("message").value(message); |
175 | 180 |
|
176 | 181 | if (t != null) { |
177 | | - buf.append(","); |
178 | | - embedExceptionJson(buf, t); |
| 182 | + embedExceptionJson(writer, t); |
179 | 183 | } |
180 | | - |
181 | | - buf.append("}"); |
182 | | - |
183 | | - settings.printStream.println(buf); |
184 | | - } |
185 | | - |
186 | | - private void embedJson(StringBuilder buf, String key, String value, boolean withComma) { |
187 | | - embedJsonKey(buf, key); |
188 | | - embedJsonValue(buf, value, withComma); |
| 184 | + writer.endObject(); |
| 185 | + settings.printStream.println(writer.toString()); |
189 | 186 | } |
190 | 187 |
|
191 | 188 | private String wrappedValueWithBracketsIfRequested(String value) { |
192 | 189 | return settings.levelInBrackets ? '[' + value + ']' : value; |
193 | 190 | } |
194 | 191 |
|
195 | | - private void embedJsonKey(StringBuilder buf, String key) { |
196 | | - buf.append("\"").append(escapeToJson(key)).append("\":\""); |
197 | | - } |
198 | | - |
199 | | - private void embedJsonValue(StringBuilder buf, String value, boolean withComma) { |
200 | | - buf.append(escapeToJson(value)).append("\""); |
201 | | - if (withComma) { |
202 | | - buf.append(","); |
203 | | - } |
204 | | - } |
205 | | - |
206 | | - private void embedExceptionJson(StringBuilder buf, Throwable t) { |
207 | | - buf.append("\"exception\":{"); |
208 | | - embedJson(buf, "message", escapeToJson(t.getMessage()), true); |
209 | | - int length = t.getStackTrace().length; |
210 | | - if (length > 0) { |
211 | | - buf.append("\"stackTrace\":[\""); |
212 | | - int count = 0; |
213 | | - for (StackTraceElement element : t.getStackTrace()) { |
214 | | - count += 1; |
215 | | - buf.append(escapeToJson(element.toString())); |
216 | | - if (count != length) { |
217 | | - buf.append("\",\""); |
218 | | - } |
| 192 | + private void embedExceptionJson(JsonWriter writer, Throwable t) { |
| 193 | + writer.name("exception"); |
| 194 | + writer.beginObject(); |
| 195 | + writer.name("message").value(t.getMessage()); |
| 196 | + if (t.getStackTrace().length > 0) { |
| 197 | + List<StackTraceElement> stackTraceElementList = Arrays.asList(t.getStackTrace()); |
| 198 | + Iterator<StackTraceElement> it = stackTraceElementList.iterator(); |
| 199 | + writer.name("stackTrace"); |
| 200 | + writer.beginArray(); |
| 201 | + while (it.hasNext()) { |
| 202 | + StackTraceElement element = it.next(); |
| 203 | + writer.value(element.toString()); |
219 | 204 | } |
220 | | - buf.append("\"]"); |
| 205 | + writer.endArray(); |
| 206 | + writer.endObject(); |
221 | 207 | } |
222 | | - |
223 | | - buf.append("}"); |
224 | 208 | } |
225 | 209 | } |
0 commit comments