/// <summary> /// Writes a log entry (that can actually be a <see cref="IMulticastLogEntry"/>). /// </summary> /// <param name="e">The log entry.</param> public void Write(ILogEntry e) { BeforeWriteEntry(); Debug.Assert(_writer != null); e.WriteLogEntry(_writer); AfterWriteEntry(); }
public void LogEntry_write_and_read_back() { var exInner = new CKExceptionData("message", "typeof(exception)", "assemblyQualifiedName", "stackTrace", null, "fileName", "fusionLog", null, null); var ex2 = new CKExceptionData("message2", "typeof(exception2)", "assemblyQualifiedName2", "stackTrace2", exInner, "fileName2", "fusionLog2", null, null); var exL = new CKExceptionData("loader-message", "typeof(loader-exception)", "loader-assemblyQualifiedName", "loader-stackTrace", null, "loader-fileName", "loader-fusionLog", null, null); var exAgg = new CKExceptionData("agg-message", "typeof(agg-exception)", "agg-assemblyQualifiedName", "agg-stackTrace", ex2, "fileName", "fusionLog", null, new[] { ex2, exL }); var prevLog = DateTimeStamp.UtcNow; ILogEntry e1 = LogEntry.CreateLog("Text1", new DateTimeStamp(DateTime.UtcNow, 42), LogLevel.Info, "c:\\test.cs", 3712, ActivityMonitor.Tags.CreateDependentToken, exAgg); ILogEntry e2 = LogEntry.CreateMulticastLog("GOId", "3712", LogEntryType.Line, prevLog, 5, "Text2", DateTimeStamp.UtcNow, LogLevel.Fatal, null, 3712, ActivityMonitor.Tags.CreateDependentToken, exAgg);; using (var mem = new MemoryStream()) using (var w = new CKBinaryWriter(mem)) { w.Write(LogReader.CurrentStreamVersion); e1.WriteLogEntry(w); e2.WriteLogEntry(w); w.Write((byte)0); w.Flush(); byte[] versionBytes = new byte[4]; mem.Position = 0; mem.Read(versionBytes, 0, 4); BitConverter.ToInt32(versionBytes, 0).Should().Be(LogReader.CurrentStreamVersion); using (var reader = new LogReader(mem, LogReader.CurrentStreamVersion, 4)) { reader.MoveNext().Should().BeTrue(); reader.Current.Text.Should().Be(e1.Text); reader.Current.LogLevel.Should().Be(e1.LogLevel); reader.Current.LogTime.Should().Be(e1.LogTime); reader.Current.FileName.Should().Be(e1.FileName); reader.Current.LineNumber.Should().Be(e1.LineNumber); reader.Current.Exception.ExceptionTypeAssemblyQualifiedName.Should().Be(e1.Exception.ExceptionTypeAssemblyQualifiedName); reader.Current.Exception.ToString().Should().Be(e1.Exception.ToString()); reader.MoveNext().Should().BeTrue(); reader.CurrentMulticast.GrandOutputId.Should().Be("GOId"); reader.CurrentMulticast.MonitorId.Should().Be("3712"); reader.CurrentMulticast.PreviousEntryType.Should().Be(LogEntryType.Line); reader.CurrentMulticast.PreviousLogTime.Should().Be(prevLog); reader.Current.Text.Should().Be(e2.Text); reader.Current.LogTime.Should().Be(e2.LogTime); reader.Current.FileName.Should().BeNull(); reader.Current.LineNumber.Should().Be(0, "Since no file name is set, line number is 0."); reader.Current.Exception.ExceptionTypeAssemblyQualifiedName.Should().Be(e2.Exception.ExceptionTypeAssemblyQualifiedName); reader.Current.Exception.ToString().Should().Be(e2.Exception.ToString()); reader.MoveNext().Should().BeFalse(); reader.BadEndOfFileMarker.Should().BeFalse(); } } }
public void LogEntryReadWrite() { var exInner = new CKExceptionData("message", "typeof(exception)", "assemblyQualifiedName", "stackTrace", null, "fileName", "fusionLog", null, null); var ex2 = new CKExceptionData("message2", "typeof(exception2)", "assemblyQualifiedName2", "stackTrace2", exInner, "fileName2", "fusionLog2", null, null); var exL = new CKExceptionData("loader-message", "typeof(loader-exception)", "loader-assemblyQualifiedName", "loader-stackTrace", null, "loader-fileName", "loader-fusionLog", null, null); var exAgg = new CKExceptionData("agg-message", "typeof(agg-exception)", "agg-assemblyQualifiedName", "agg-stackTrace", ex2, "fileName", "fusionLog", null, new[] { ex2, exL }); var prevLog = DateTimeStamp.UtcNow; ILogEntry e1 = LogEntry.CreateLog("Text1", new DateTimeStamp(DateTime.UtcNow, 42), LogLevel.Info, "c:\\test.cs", 3712, ActivityMonitor.Tags.CreateDependentActivity, exAgg); ILogEntry e2 = LogEntry.CreateMulticastLog(Guid.Empty, LogEntryType.Line, prevLog, 5, "Text2", DateTimeStamp.UtcNow, LogLevel.Fatal, null, 3712, ActivityMonitor.Tags.CreateDependentActivity, exAgg); using (var mem = new MemoryStream()) using (var w = new CKBinaryWriter(mem)) { w.Write(LogReader.CurrentStreamVersion); e1.WriteLogEntry(w); e2.WriteLogEntry(w); w.Write((byte)0); w.Flush(); byte[] versionBytes = new byte[4]; mem.Position = 0; mem.Read(versionBytes, 0, 4); Assert.That(BitConverter.ToInt32(versionBytes, 0), Is.EqualTo(LogReader.CurrentStreamVersion)); using (var reader = new LogReader(mem, LogReader.CurrentStreamVersion, 4)) { Assert.That(reader.MoveNext()); Assert.That(reader.Current.Text, Is.EqualTo(e1.Text)); Assert.That(reader.Current.LogLevel, Is.EqualTo(e1.LogLevel)); Assert.That(reader.Current.LogTime, Is.EqualTo(e1.LogTime)); Assert.That(reader.Current.FileName, Is.EqualTo(e1.FileName)); Assert.That(reader.Current.LineNumber, Is.EqualTo(e1.LineNumber)); Assert.That(reader.Current.Exception.ExceptionTypeAssemblyQualifiedName, Is.EqualTo(e1.Exception.ExceptionTypeAssemblyQualifiedName)); Assert.That(reader.Current.Exception.ToString(), Is.EqualTo(e1.Exception.ToString())); Assert.That(reader.MoveNext()); Assert.That(reader.CurrentMulticast.PreviousEntryType, Is.EqualTo(LogEntryType.Line)); Assert.That(reader.CurrentMulticast.PreviousLogTime, Is.EqualTo(prevLog)); Assert.That(reader.Current.Text, Is.EqualTo(e2.Text)); Assert.That(reader.Current.LogTime, Is.EqualTo(e2.LogTime)); Assert.That(reader.Current.FileName, Is.Null); Assert.That(reader.Current.LineNumber, Is.EqualTo(0), "Since no file name is set, line number is 0."); Assert.That(reader.Current.Exception.ExceptionTypeAssemblyQualifiedName, Is.EqualTo(e2.Exception.ExceptionTypeAssemblyQualifiedName)); Assert.That(reader.Current.Exception.ToString(), Is.EqualTo(e2.Exception.ToString())); Assert.That(reader.MoveNext(), Is.False); Assert.That(reader.BadEndOfFileMarker, Is.False); } } }
/// <summary> /// Writes a log entry (that can actually be a <see cref="IMulticastLogEntry"/>). /// </summary> /// <param name="e">The log entry.</param> public void Write(ILogEntry e) { BeforeWrite(); e.WriteLogEntry(_writer); AfterWrite(); }
/// <summary> /// Writes a log entry (that can actually be a <see cref="IMulticastLogEntry"/>). /// </summary> /// <param name="e">The log entry.</param> public void Write( ILogEntry e ) { BeforeWrite(); e.WriteLogEntry( _writer ); AfterWrite(); }