/// <summary>
 /// Override to specify how the trace entry should be logged.
 /// </summary>
 /// <param name="item">Trace entry</param>
 protected override void DoLog(TraceLogItem item)
 {
     using (var db = new SqlDatabase(_sqlConnectionOrName))
     {
         var logRecord = new TraceRecord
             {
                 // ReSharper disable PossibleInvalidOperationException
                 Timestamp = item.TimestampUtc.Value,
                 // ReSharper restore PossibleInvalidOperationException
                 Type = (int)item.Type,
                 OperationType = item.OperationType,
                 SessionId = item.SessionId,
                 BusinessTransactionId = item.BusinessTransactionId,
                 OperationInstanceId = item.OperationInstanceId,
                 TenantId = item.TenantId,
                 Message = item.Message,
                 DetailedMessage = item.DetailedMessage,
                 ServerName = item.ServerName,
                 // ReSharper disable PossibleInvalidOperationException
                 ThreadId = item.ThreadId.Value
                 // ReSharper restore PossibleInvalidOperationException
             };
         db.Insert(logRecord);
     }
 }
        public void ComplexScenarioWorks()
        {
            // --- Arrange
            if (File.Exists(Path.Combine(LOG_ROOT, "08", LOG_FILE)))
            {
                File.Delete(Path.Combine(LOG_ROOT, "08", LOG_FILE));
            }
            if (File.Exists(Path.Combine(LOG_ROOT, "09", LOG_FILE)))
            {
                File.Delete(Path.Combine(LOG_ROOT, "09", LOG_FILE));
            }
            var tracer = new FileTraceLogger(LOG_FILE, LOG_ROOT, "hh", flushAfter: 3);
            var traceItem1 = new TraceLogItem
            {
                // 8 o'clock
                TimestampUtc = new DateTime(2012, 1, 1, 8, 0, 0),
                Type = TraceLogItemType.Informational,
                ServerName = "Server",
                ThreadId = 123,
                OperationType = "TestOp",
                Message = "Message"
            };
            var traceItem2 = new TraceLogItem
            {
                // 9 o'clock
                TimestampUtc = new DateTime(2012, 1, 1, 9, 0, 0),
                Type = TraceLogItemType.Informational,
                ServerName = "Server",
                ThreadId = 123,
                OperationType = "TestOp",
                Message = "Message"
            };

            // --- Act
            for (var i = 0; i < 3; i++)
            {
                tracer.Log(traceItem1);
                tracer.Log(traceItem2);
                tracer.Log(traceItem1);
                tracer.Log(traceItem1);
            }
            tracer.Dispose();

            // --- Assert
            var text1 = File.ReadAllText(Path.Combine(LOG_ROOT, "08", LOG_FILE));
            var lines1 = text1.Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
            lines1.ShouldHaveCountOf(9);
            foreach (var line in lines1)
            {
                line.ShouldEqual("2012.01.01. 8:00:00\tInformational\tServer\t123\tTestOp\tMessage\t");
            }
            var text2 = File.ReadAllText(Path.Combine(LOG_ROOT, "09", LOG_FILE));
            var lines2 = text2.Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
            lines2.ShouldHaveCountOf(3);
            foreach (var line in lines2)
            {
                line.ShouldEqual("2012.01.01. 9:00:00\tInformational\tServer\t123\tTestOp\tMessage\t");
            }
        }
Example #3
0
 private static void LogSingleItem(TextWriter writer, TraceLogItem item)
 {
     writer.WriteLine("{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}",
         item.TimestampUtc,
         item.Type,
         item.ServerName,
         item.ThreadId,
         item.OperationType,
         item.Message,
         item.DetailedMessage);
 }
Example #4
0
 /// <summary>
 /// Gets the full path of the file the specified entry should be logged to.
 /// </summary>
 /// <param name="entry">Log entry</param>
 /// <returns>The full path of the log file to be used.</returns>
 protected virtual string GetFullFilePath(TraceLogItem entry)
 {
     // -- Calculate the new full log file name according to the timestamp
     // ReSharper disable FormatStringProblem
     var subfolder =
         string.IsNullOrWhiteSpace(FolderPattern)
             ? String.Empty
             : string.Format(CultureInfo.InvariantCulture, "{0:" + FolderPattern + "}", entry.TimestampUtc);
     var filePrefix =
         string.IsNullOrWhiteSpace(FileNamePrefixPattern)
             ? String.Empty
             : string.Format(CultureInfo.InvariantCulture, "{0:" + FileNamePrefixPattern + "}", entry.TimestampUtc);
     var fileSuffix =
         string.IsNullOrWhiteSpace(FileNameSuffixPattern)
             ? String.Empty
             : string.Format(CultureInfo.InvariantCulture, "{0:" + FileNameSuffixPattern + "}", entry.TimestampUtc);
     var filebase = Path.GetFileNameWithoutExtension(FileName);
     var extension = Path.GetExtension(FileName);
     var fullFileName = filePrefix + filebase + fileSuffix + extension;
     return Path.Combine(RootFolder, Path.Combine(subfolder, fullFileName));
     // ReSharper restore FormatStringProblem
 }
Example #5
0
 /// <summary>
 /// Override to specify how the trace entry should be logged.
 /// </summary>
 /// <param name="item">Trace entry</param>
 protected override void DoLog(TraceLogItem item)
 {
     if (_isDisposing) return;
     _entryQueue.Enqueue(item);
     if (_entryQueue.Count >= FlushAfter)
     {
         Flush();
     }
 }
        public void SingleScenarioWorks()
        {
            // --- Arrange
            var tracer = new FileTraceLogger(LOG_FILE, LOG_ROOT, flushAfter: 3);
            var traceItem = new TraceLogItem
            {
                TimestampUtc = new DateTime(2012, 1, 1, 8, 0, 0),
                Type = TraceLogItemType.Informational,
                ServerName = "Server",
                ThreadId = 123,
                OperationType = "TestOp",
                Message = "Message"
            };

            // --- Act
            for (var i = 0; i < 5; i++) tracer.Log(traceItem);
            tracer.Dispose();

            // --- Assert
            var text = File.ReadAllText(Path.Combine(LOG_ROOT, LOG_FILE));
            var lines = text.Split(new [] {"\r\n"}, StringSplitOptions.RemoveEmptyEntries);
            foreach (var line in lines)
            {
                line.ShouldEqual("2012.01.01. 8:00:00\tInformational\tServer\t123\tTestOp\tMessage\t");
            }
            lines.ShouldHaveCountOf(5);
        }