/// <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();
                    }
                }
        }
示例#3
0
        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);
                    }
                }
        }
示例#4
0
 /// <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();
 }