Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
XmlWriterTraceListener.cs
Go to the documentation of this file.
3using System.IO;
4using System.Text;
5using System.Xml;
7
8namespace System.Diagnostics;
9
11{
12 private static volatile string s_processName;
13
14 private readonly string _machineName = Environment.MachineName;
15
17
19
24
25 public XmlWriterTraceListener(Stream stream, string? name)
26 : base(stream, name)
27 {
28 }
29
34
36 : base(writer, name)
37 {
38 }
39
41 : base(filename)
42 {
43 }
44
45 public XmlWriterTraceListener(string? filename, string? name)
46 : base(filename, name)
47 {
48 }
49
50 public override void Write(string? message)
51 {
52 WriteLine(message);
53 }
54
55 public override void WriteLine(string? message)
56 {
57 TraceEvent(null, System.SR.TraceAsTraceSource, TraceEventType.Information, 0, message);
58 }
59
60 public override void Fail(string? message, string? detailMessage)
61 {
62 if (message == null)
63 {
64 message = string.Empty;
65 }
66 int length = ((detailMessage != null) ? (message.Length + 1 + detailMessage.Length) : message.Length);
67 TraceEvent(null, System.SR.TraceAsTraceSource, TraceEventType.Error, 0, string.Create(length, (message, detailMessage), delegate(Span<char> dst, (string message, string detailMessage) v)
68 {
69 var (text, _) = v;
70 text.CopyTo(dst);
71 if (v.detailMessage != null)
72 {
73 dst[text.Length] = ' ';
74 string item = v.detailMessage;
75 item.CopyTo(dst.Slice(text.Length + 1, item.Length));
76 }
77 }));
78 }
79
80 public override void TraceEvent(TraceEventCache? eventCache, string source, TraceEventType eventType, int id, string? format, params object?[]? args)
81 {
82 if (base.Filter == null || base.Filter.ShouldTrace(eventCache, source, eventType, id, format, args, null, null))
83 {
84 WriteHeader(source, eventType, id, eventCache);
85 WriteEscaped((args != null && args.Length != 0) ? string.Format(CultureInfo.InvariantCulture, format, args) : format);
87 }
88 }
89
90 public override void TraceEvent(TraceEventCache? eventCache, string source, TraceEventType eventType, int id, string? message)
91 {
92 if (base.Filter == null || base.Filter.ShouldTrace(eventCache, source, eventType, id, message, null, null, null))
93 {
94 WriteHeader(source, eventType, id, eventCache);
95 WriteEscaped(message);
97 }
98 }
99
100 public override void TraceData(TraceEventCache? eventCache, string source, TraceEventType eventType, int id, object? data)
101 {
102 if (base.Filter == null || base.Filter.ShouldTrace(eventCache, source, eventType, id, null, null, data, null))
103 {
104 WriteHeader(source, eventType, id, eventCache);
105 InternalWrite("<TraceData>");
106 if (data != null)
107 {
108 InternalWrite("<DataItem>");
109 WriteData(data);
110 InternalWrite("</DataItem>");
111 }
112 InternalWrite("</TraceData>");
114 }
115 }
116
117 public override void TraceData(TraceEventCache? eventCache, string source, TraceEventType eventType, int id, params object?[]? data)
118 {
119 if (base.Filter != null && !base.Filter.ShouldTrace(eventCache, source, eventType, id, null, null, null, data))
120 {
121 return;
122 }
123 WriteHeader(source, eventType, id, eventCache);
124 InternalWrite("<TraceData>");
125 if (data != null)
126 {
127 for (int i = 0; i < data.Length; i++)
128 {
129 InternalWrite("<DataItem>");
130 if (data[i] != null)
131 {
132 WriteData(data[i]);
133 }
134 InternalWrite("</DataItem>");
135 }
136 }
137 InternalWrite("</TraceData>");
139 }
140
141 private void WriteData(object data)
142 {
143 if (!(data is XPathNavigator xPathNavigator))
144 {
145 WriteEscaped(data.ToString());
146 return;
147 }
148 if (_strBldr == null)
149 {
150 _strBldr = new StringBuilder();
152 }
153 else
154 {
155 _strBldr.Length = 0;
156 }
157 try
158 {
159 xPathNavigator.MoveToRoot();
162 }
163 catch (Exception)
164 {
165 InternalWrite(data.ToString());
166 }
167 }
168
169 public override void Close()
170 {
171 base.Close();
173 _xmlBlobWriter = null;
174 _strBldr = null;
175 }
176
177 public override void TraceTransfer(TraceEventCache? eventCache, string source, int id, string? message, Guid relatedActivityId)
178 {
179 if (base.Filter == null || base.Filter.ShouldTrace(eventCache, source, TraceEventType.Transfer, id, message, null, null, null))
180 {
182 WriteEscaped(message);
184 }
185 }
186
188 {
189 WriteStartHeader(source, eventType, id, eventCache);
190 InternalWrite("\" RelatedActivityID=\"");
191 InternalWrite(relatedActivityId.ToString("B"));
193 }
194
195 private void WriteHeader(string source, TraceEventType eventType, int id, TraceEventCache eventCache)
196 {
197 WriteStartHeader(source, eventType, id, eventCache);
199 }
200
201 private void WriteStartHeader(string source, TraceEventType eventType, int id, TraceEventCache eventCache)
202 {
203 InternalWrite("<E2ETraceEvent xmlns=\"http://schemas.microsoft.com/2004/06/E2ETraceEvent\"><System xmlns=\"http://schemas.microsoft.com/2004/06/windows/eventlog/system\">");
204 InternalWrite("<EventID>");
205 uint num = (uint)id;
207 InternalWrite("</EventID>");
208 InternalWrite("<Type>3</Type>");
209 InternalWrite("<SubType Name=\"");
210 InternalWrite(eventType.ToString());
211 InternalWrite("\">0</SubType>");
212 InternalWrite("<Level>");
213 int num2 = (int)eventType;
214 if (num2 > 255)
215 {
216 num2 = 255;
217 }
218 if (num2 < 0)
219 {
220 num2 = 0;
221 }
223 InternalWrite("</Level>");
224 InternalWrite("<TimeCreated SystemTime=\"");
225 if (eventCache != null)
226 {
227 InternalWrite(eventCache.DateTime.ToString("o", CultureInfo.InvariantCulture));
228 }
229 else
230 {
232 }
233 InternalWrite("\" />");
234 InternalWrite("<Source Name=\"");
236 InternalWrite("\" />");
237 InternalWrite("<Correlation ActivityID=\"");
238 if (eventCache != null)
239 {
240 InternalWrite(Trace.CorrelationManager.ActivityId.ToString("B"));
241 }
242 else
243 {
244 InternalWrite(Guid.Empty.ToString("B"));
245 }
246 }
247
248 private void WriteEndHeader()
249 {
250 string text = s_processName;
251 if (text == null)
252 {
254 {
255 text = (s_processName = string.Empty);
256 }
257 else
258 {
260 text = (s_processName = process.ProcessName);
261 }
262 }
263 InternalWrite("\" />");
264 InternalWrite("<Execution ProcessName=\"");
266 InternalWrite("\" ProcessID=\"");
268 InternalWrite("\" ThreadID=\"");
270 InternalWrite("\" />");
271 InternalWrite("<Channel/>");
272 InternalWrite("<Computer>");
274 InternalWrite("</Computer>");
275 InternalWrite("</System>");
276 InternalWrite("<ApplicationData>");
277 }
278
280 {
281 bool flag = IsEnabled(TraceOptions.LogicalOperationStack);
282 bool flag2 = IsEnabled(TraceOptions.Callstack);
283 if (eventCache != null && (flag || flag2))
284 {
285 InternalWrite("<System.Diagnostics xmlns=\"http://schemas.microsoft.com/2004/08/System.Diagnostics\">");
286 if (flag)
287 {
288 InternalWrite("<LogicalOperationStack>");
289 Stack logicalOperationStack = eventCache.LogicalOperationStack;
290 foreach (object item in logicalOperationStack)
291 {
292 InternalWrite("<LogicalOperation>");
294 InternalWrite("</LogicalOperation>");
295 }
296 InternalWrite("</LogicalOperationStack>");
297 }
298 InternalWrite("<Timestamp>");
300 InternalWrite("</Timestamp>");
301 if (flag2)
302 {
303 InternalWrite("<Callstack>");
304 WriteEscaped(eventCache.Callstack);
305 InternalWrite("</Callstack>");
306 }
307 InternalWrite("</System.Diagnostics>");
308 }
309 InternalWrite("</ApplicationData></E2ETraceEvent>");
310 }
311
312 private void WriteEscaped(string str)
313 {
314 if (string.IsNullOrEmpty(str))
315 {
316 return;
317 }
318 int num = 0;
319 for (int i = 0; i < str.Length; i++)
320 {
321 switch (str[i])
322 {
323 case '&':
324 InternalWrite(str.Substring(num, i - num));
325 InternalWrite("&amp;");
326 num = i + 1;
327 break;
328 case '<':
329 InternalWrite(str.Substring(num, i - num));
330 InternalWrite("&lt;");
331 num = i + 1;
332 break;
333 case '>':
334 InternalWrite(str.Substring(num, i - num));
335 InternalWrite("&gt;");
336 num = i + 1;
337 break;
338 case '"':
339 InternalWrite(str.Substring(num, i - num));
340 InternalWrite("&quot;");
341 num = i + 1;
342 break;
343 case '\'':
344 InternalWrite(str.Substring(num, i - num));
345 InternalWrite("&apos;");
346 num = i + 1;
347 break;
348 case '\r':
349 InternalWrite(str.Substring(num, i - num));
350 InternalWrite("&#xD;");
351 num = i + 1;
352 break;
353 case '\n':
354 InternalWrite(str.Substring(num, i - num));
355 InternalWrite("&#xA;");
356 num = i + 1;
357 break;
358 }
359 }
360 InternalWrite(str.Substring(num, str.Length - num));
361 }
362
363 private void InternalWrite(string message)
364 {
365 EnsureWriter();
366 _writer?.Write(message);
367 }
368}
static Process GetCurrentProcess()
Definition Process.cs:1107
static CorrelationManager CorrelationManager
Definition Trace.cs:8
override void Fail(string? message, string? detailMessage)
XmlWriterTraceListener(TextWriter writer, string? name)
XmlWriterTraceListener(string? filename, string? name)
void WriteHeader(string source, TraceEventType eventType, int id, TraceEventCache eventCache, Guid relatedActivityId)
void WriteHeader(string source, TraceEventType eventType, int id, TraceEventCache eventCache)
override void TraceData(TraceEventCache? eventCache, string source, TraceEventType eventType, int id, params object?[]? data)
override void TraceEvent(TraceEventCache? eventCache, string source, TraceEventType eventType, int id, string? message)
void WriteStartHeader(string source, TraceEventType eventType, int id, TraceEventCache eventCache)
override void TraceData(TraceEventCache? eventCache, string source, TraceEventType eventType, int id, object? data)
override void TraceEvent(TraceEventCache? eventCache, string source, TraceEventType eventType, int id, string? format, params object?[]? args)
void WriteFooter(TraceEventCache eventCache)
XmlWriterTraceListener(Stream stream, string? name)
override void TraceTransfer(TraceEventCache? eventCache, string source, int id, string? message, Guid relatedActivityId)
static int CurrentManagedThreadId
static int ProcessId
static string MachineName
static CultureInfo CurrentCulture
static CultureInfo InvariantCulture
virtual void Write(char value)
static string TraceAsTraceSource
Definition SR.cs:16
Definition SR.cs:7
override string ToString()
virtual void Close()
Definition XmlWriter.cs:110
virtual void WriteNode(XmlReader reader, bool defattr)
Definition XmlWriter.cs:253
static DateTime Now
Definition DateTime.cs:103
static readonly Guid Empty
Definition Guid.cs:86