-Added DiagnosticsTraceWriter and MemoryTraceWriter
This commit is contained in:
@@ -76,5 +76,5 @@ using System.Security;
|
||||
// by using the '*' as shown below:
|
||||
[assembly: AssemblyVersion("4.5.0.0")]
|
||||
#if !PocketPC
|
||||
[assembly: AssemblyFileVersion("4.5.10.15509")]
|
||||
[assembly: AssemblyFileVersion("4.5.10.15511")]
|
||||
#endif
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Runtime.Serialization;
|
||||
using System.Runtime.Serialization.Formatters;
|
||||
@@ -23,9 +24,95 @@ using System.Linq;
|
||||
|
||||
namespace Newtonsoft.Json.Tests.Serialization
|
||||
{
|
||||
public class Staff
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public DateTime StartDate { get; set; }
|
||||
public IList<string> Roles { get; set; }
|
||||
}
|
||||
|
||||
[TestFixture]
|
||||
public class TraceWriterTests : TestFixtureBase
|
||||
{
|
||||
#if !(SILVERLIGHT || PORTABLE || NETFX_CORE)
|
||||
[Test]
|
||||
public void DiagnosticsTraceWriterTest()
|
||||
{
|
||||
StringWriter sw = new StringWriter();
|
||||
TextWriterTraceListener listener = new TextWriterTraceListener(sw);
|
||||
|
||||
try
|
||||
{
|
||||
Trace.AutoFlush = true;
|
||||
Trace.Listeners.Add(listener);
|
||||
|
||||
DiagnosticsTraceWriter traceWriter = new DiagnosticsTraceWriter();
|
||||
traceWriter.Trace(TraceLevel.Verbose, "Verbose!", null);
|
||||
traceWriter.Trace(TraceLevel.Info, "Info!", null);
|
||||
traceWriter.Trace(TraceLevel.Warning, "Warning!", null);
|
||||
traceWriter.Trace(TraceLevel.Error, "Error!", null);
|
||||
traceWriter.Trace(TraceLevel.Off, "Off!", null);
|
||||
|
||||
Assert.AreEqual(@"Newtonsoft.Json Verbose: 0 : Verbose!
|
||||
Newtonsoft.Json Information: 0 : Info!
|
||||
Newtonsoft.Json Warning: 0 : Warning!
|
||||
Newtonsoft.Json Error: 0 : Error!
|
||||
", sw.ToString());
|
||||
}
|
||||
finally
|
||||
{
|
||||
Trace.Listeners.Remove(listener);
|
||||
Trace.AutoFlush = false;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
[Test]
|
||||
public void MemoryTraceWriterTest()
|
||||
{
|
||||
Staff staff = new Staff();
|
||||
staff.Name = "Arnie Admin";
|
||||
staff.Roles = new List<string> {"Administrator"};
|
||||
staff.StartDate = DateTime.Now;
|
||||
|
||||
ITraceWriter traceWriter = new MemoryTraceWriter();
|
||||
|
||||
JsonConvert.SerializeObject(
|
||||
staff,
|
||||
new JsonSerializerSettings {TraceWriter = traceWriter, Converters = {new JavaScriptDateTimeConverter()}});
|
||||
|
||||
Console.WriteLine(traceWriter);
|
||||
// 2012-11-11T12:08:42.761 Info Started serializing Newtonsoft.Json.Tests.Serialization.Staff. Path ''.
|
||||
// 2012-11-11T12:08:42.785 Info Started serializing System.DateTime with converter Newtonsoft.Json.Converters.JavaScriptDateTimeConverter. Path 'StartDate'.
|
||||
// 2012-11-11T12:08:42.791 Info Finished serializing System.DateTime with converter Newtonsoft.Json.Converters.JavaScriptDateTimeConverter. Path 'StartDate'.
|
||||
// 2012-11-11T12:08:42.797 Info Started serializing System.Collections.Generic.List`1[System.String]. Path 'Roles'.
|
||||
// 2012-11-11T12:08:42.798 Info Finished serializing System.Collections.Generic.List`1[System.String]. Path 'Roles'.
|
||||
// 2012-11-11T12:08:42.799 Info Finished serializing Newtonsoft.Json.Tests.Serialization.Staff. Path ''.
|
||||
|
||||
MemoryTraceWriter memoryTraceWriter = (MemoryTraceWriter)traceWriter;
|
||||
|
||||
Assert.AreEqual(743, memoryTraceWriter.ToString().Length);
|
||||
Assert.AreEqual(6, memoryTraceWriter.GetTraceMessages().Count());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void MemoryTraceWriterLimitTest()
|
||||
{
|
||||
MemoryTraceWriter traceWriter = new MemoryTraceWriter();
|
||||
|
||||
for (int i = 0; i < 1005; i++)
|
||||
{
|
||||
traceWriter.Trace(TraceLevel.Verbose, (i + 1).ToString(CultureInfo.InvariantCulture), null);
|
||||
}
|
||||
|
||||
IList<string> traceMessages = traceWriter.GetTraceMessages().ToList();
|
||||
|
||||
Assert.AreEqual(1000, traceMessages.Count);
|
||||
|
||||
Assert.IsTrue(traceMessages.First().EndsWith(" 6"));
|
||||
Assert.IsTrue(traceMessages.Last().EndsWith(" 1005"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Serialize()
|
||||
{
|
||||
|
||||
@@ -103,8 +103,11 @@
|
||||
<Compile Include="JsonPosition.cs" />
|
||||
<Compile Include="Linq\JPropertyKeyedCollection.cs" />
|
||||
<Compile Include="SerializationBinder.cs" />
|
||||
<Compile Include="Serialization\DiagnosticsTraceWriter.cs" />
|
||||
<Compile Include="Serialization\ITraceWriter.cs" />
|
||||
<Compile Include="Serialization\JsonContainerContract.cs" />
|
||||
<Compile Include="Serialization\JsonDynamicContract.cs" />
|
||||
<Compile Include="Serialization\MemoryTraceWriter.cs" />
|
||||
<Compile Include="StreamingContext.cs" />
|
||||
<Compile Include="Utilities\LinqBridge.cs" />
|
||||
<Compile Include="Linq\JPath.cs" />
|
||||
|
||||
@@ -116,8 +116,10 @@
|
||||
<Compile Include="Linq\JPropertyDescriptor.cs" />
|
||||
<Compile Include="Linq\JPropertyKeyedCollection.cs" />
|
||||
<Compile Include="SerializationBinder.cs" />
|
||||
<Compile Include="Serialization\DiagnosticsTraceWriter.cs" />
|
||||
<Compile Include="Serialization\ITraceWriter.cs" />
|
||||
<Compile Include="Serialization\JsonContainerContract.cs" />
|
||||
<Compile Include="Serialization\MemoryTraceWriter.cs" />
|
||||
<Compile Include="StreamingContext.cs" />
|
||||
<Compile Include="TraceLevel.cs" />
|
||||
<Compile Include="Utilities\DynamicProxy.cs" />
|
||||
|
||||
@@ -143,6 +143,7 @@
|
||||
<Compile Include="Serialization\DefaultContractResolver.cs" />
|
||||
<Compile Include="Serialization\DefaultReferenceResolver.cs" />
|
||||
<Compile Include="Serialization\DefaultSerializationBinder.cs" />
|
||||
<Compile Include="Serialization\DiagnosticsTraceWriter.cs" />
|
||||
<Compile Include="Serialization\DynamicValueProvider.cs" />
|
||||
<Compile Include="Serialization\ErrorContext.cs" />
|
||||
<Compile Include="Serialization\ErrorEventArgs.cs" />
|
||||
@@ -169,6 +170,7 @@
|
||||
<Compile Include="Serialization\JsonStringContract.cs" />
|
||||
<Compile Include="Serialization\JsonTypeReflector.cs" />
|
||||
<Compile Include="Serialization\LateBoundMetadataTypeAttribute.cs" />
|
||||
<Compile Include="Serialization\MemoryTraceWriter.cs" />
|
||||
<Compile Include="Serialization\ObjectConstructor.cs" />
|
||||
<Compile Include="Serialization\OnErrorAttribute.cs" />
|
||||
<Compile Include="Serialization\ReflectionValueProvider.cs" />
|
||||
|
||||
@@ -166,6 +166,7 @@
|
||||
<Compile Include="Serialization\DefaultContractResolver.cs" />
|
||||
<Compile Include="Serialization\DefaultReferenceResolver.cs" />
|
||||
<Compile Include="Serialization\DefaultSerializationBinder.cs" />
|
||||
<Compile Include="Serialization\DiagnosticsTraceWriter.cs" />
|
||||
<Compile Include="Serialization\DynamicValueProvider.cs" />
|
||||
<Compile Include="Serialization\ErrorContext.cs" />
|
||||
<Compile Include="Serialization\ErrorEventArgs.cs" />
|
||||
@@ -191,6 +192,7 @@
|
||||
<Compile Include="Serialization\JsonSerializerInternalWriter.cs" />
|
||||
<Compile Include="Serialization\JsonStringContract.cs" />
|
||||
<Compile Include="Serialization\LateBoundMetadataTypeAttribute.cs" />
|
||||
<Compile Include="Serialization\MemoryTraceWriter.cs" />
|
||||
<Compile Include="Serialization\ObjectConstructor.cs" />
|
||||
<Compile Include="Serialization\OnErrorAttribute.cs" />
|
||||
<Compile Include="Serialization\ReflectionValueProvider.cs" />
|
||||
|
||||
@@ -241,6 +241,8 @@
|
||||
<Compile Include="Serialization\ObjectConstructor.cs" />
|
||||
<Compile Include="Serialization\OnErrorAttribute.cs" />
|
||||
<Compile Include="Serialization\ReflectionValueProvider.cs" />
|
||||
<Compile Include="Serialization\DiagnosticsTraceWriter.cs" />
|
||||
<Compile Include="Serialization\MemoryTraceWriter.cs" />
|
||||
<Compile Include="StreamingContext.cs" />
|
||||
<Compile Include="TraceLevel.cs" />
|
||||
<Compile Include="TypeNameHandling.cs" />
|
||||
|
||||
@@ -139,6 +139,7 @@
|
||||
<Compile Include="Serialization\DefaultContractResolver.cs" />
|
||||
<Compile Include="Serialization\DefaultReferenceResolver.cs" />
|
||||
<Compile Include="Serialization\DefaultSerializationBinder.cs" />
|
||||
<Compile Include="Serialization\DiagnosticsTraceWriter.cs" />
|
||||
<Compile Include="Serialization\DynamicValueProvider.cs" />
|
||||
<Compile Include="Serialization\ErrorContext.cs" />
|
||||
<Compile Include="Serialization\ErrorEventArgs.cs" />
|
||||
@@ -164,6 +165,7 @@
|
||||
<Compile Include="Serialization\JsonSerializerInternalWriter.cs" />
|
||||
<Compile Include="Serialization\JsonStringContract.cs" />
|
||||
<Compile Include="Serialization\LateBoundMetadataTypeAttribute.cs" />
|
||||
<Compile Include="Serialization\MemoryTraceWriter.cs" />
|
||||
<Compile Include="Serialization\ObjectConstructor.cs" />
|
||||
<Compile Include="Serialization\OnErrorAttribute.cs" />
|
||||
<Compile Include="Serialization\ReflectionValueProvider.cs" />
|
||||
|
||||
@@ -113,8 +113,10 @@
|
||||
<Compile Include="JsonConstructorAttribute.cs" />
|
||||
<Compile Include="JsonPosition.cs" />
|
||||
<Compile Include="Linq\JPropertyKeyedCollection.cs" />
|
||||
<Compile Include="Serialization\DiagnosticsTraceWriter.cs" />
|
||||
<Compile Include="Serialization\ITraceWriter.cs" />
|
||||
<Compile Include="Serialization\JsonContainerContract.cs" />
|
||||
<Compile Include="Serialization\MemoryTraceWriter.cs" />
|
||||
<Compile Include="Utilities\DynamicProxy.cs" />
|
||||
<Compile Include="Linq\JPath.cs" />
|
||||
<Compile Include="Linq\JRaw.cs" />
|
||||
|
||||
@@ -90,7 +90,7 @@ using System.Security;
|
||||
// by using the '*' as shown below:
|
||||
[assembly: AssemblyVersion("4.5.0.0")]
|
||||
#if !PocketPC
|
||||
[assembly: AssemblyFileVersion("4.5.10.15509")]
|
||||
[assembly: AssemblyFileVersion("4.5.10.15511")]
|
||||
#endif
|
||||
|
||||
[assembly: CLSCompliant(true)]
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
#if !(SILVERLIGHT || PORTABLE || NETFX_CORE)
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using DiagnosticsTrace = System.Diagnostics.Trace;
|
||||
|
||||
namespace Newtonsoft.Json.Serialization
|
||||
{
|
||||
public class DiagnosticsTraceWriter : ITraceWriter
|
||||
{
|
||||
public TraceLevel LevelFilter { get; set; }
|
||||
|
||||
private TraceEventType GetTraceEventType(TraceLevel level)
|
||||
{
|
||||
switch (level)
|
||||
{
|
||||
case TraceLevel.Error:
|
||||
return TraceEventType.Error;
|
||||
case TraceLevel.Warning:
|
||||
return TraceEventType.Warning;
|
||||
case TraceLevel.Info:
|
||||
return TraceEventType.Information;
|
||||
case TraceLevel.Verbose:
|
||||
return TraceEventType.Verbose;
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException("level");
|
||||
}
|
||||
}
|
||||
|
||||
public void Trace(TraceLevel level, string message, Exception ex)
|
||||
{
|
||||
if (level == TraceLevel.Off)
|
||||
return;
|
||||
|
||||
TraceEventCache eventCache = new TraceEventCache();
|
||||
TraceEventType traceEventType = GetTraceEventType(level);
|
||||
|
||||
foreach (TraceListener listener in DiagnosticsTrace.Listeners)
|
||||
{
|
||||
if (!listener.IsThreadSafe)
|
||||
{
|
||||
lock (listener)
|
||||
{
|
||||
listener.TraceEvent(eventCache, "Newtonsoft.Json", traceEventType, 0, message);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
listener.TraceEvent(eventCache, "Newtonsoft.Json", traceEventType, 0, message);
|
||||
}
|
||||
|
||||
if (DiagnosticsTrace.AutoFlush)
|
||||
listener.Flush();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,49 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Text;
|
||||
|
||||
namespace Newtonsoft.Json.Serialization
|
||||
{
|
||||
public class MemoryTraceWriter : ITraceWriter
|
||||
{
|
||||
private readonly Queue<string> _traceMessages;
|
||||
|
||||
public TraceLevel LevelFilter { get; set; }
|
||||
|
||||
public MemoryTraceWriter()
|
||||
{
|
||||
LevelFilter = TraceLevel.Verbose;
|
||||
_traceMessages = new Queue<string>();
|
||||
}
|
||||
|
||||
public void Trace(TraceLevel level, string message, Exception ex)
|
||||
{
|
||||
string traceMessage = DateTime.Now.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff") + " " + level.ToString("g") + " " + message;
|
||||
|
||||
if (_traceMessages.Count >= 1000)
|
||||
_traceMessages.Dequeue();
|
||||
|
||||
_traceMessages.Enqueue(traceMessage);
|
||||
}
|
||||
|
||||
public IEnumerable<string> GetTraceMessages()
|
||||
{
|
||||
return _traceMessages;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
foreach (string traceMessage in _traceMessages)
|
||||
{
|
||||
if (sb.Length > 0)
|
||||
sb.AppendLine();
|
||||
|
||||
sb.Append(traceMessage);
|
||||
}
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user