protected void WriteMessage(Stream stream, TraceMessage message) { if (stream.Length == 0) { string msgHeader = string.Format("{0} {1} {2} {3} {4} {5} {6} {7} {8}", "Date".PadRight(24), "MessageType".PadRight(13), "MessageKind".PadRight(14), "User".PadRight(15), "PID".PadRight(6), "TID".PadRight(6), "ID".PadRight(6), "ActivityID".PadRight(40), "Description"); stream.Write(Encoding.Default.GetBytes(msgHeader), 0, msgHeader.Length); // Add Carriage Return, Line feed. stream.Write(new byte[] { 0x0D, 0x0A }, 0, 2); } var description = new StringBuilder(message.FullText); if (null != message.Source && !String.IsNullOrWhiteSpace(message.Source.Stacktrace) && (message.Type.Equals("Error") || message.Type.Equals("Fatal"))) { description.AppendLine(); description.Append(message.Source.Stacktrace); } string msg = string.Format("{0} {1} {2} {3} {4} {5} {6} {7} {8} - {9} - {10}", message.Source.Date.ToString("dd/MM/yyyy HH:mm:ss,fff").PadRight(24), message.Type.ToString().PadRight(13), message.Category.ToString().PadRight(14), message.Source.IdentityName.PadRight(15), message.Source.ProcessId.ToString().PadRight(6), message.Source.ThreadId.ToString().PadRight(6), message.Source.EventId.ToString().PadRight(6), String.IsNullOrWhiteSpace(message.ActivityId) ? string.Empty.PadRight(40) : message.ActivityId.PadRight(40), message.Source.TypeName, message.Source.MethodName, description); stream.Write(Encoding.Default.GetBytes(msg), 0, msg.Length); // Add Carriage Return, Line feed. stream.Write(new byte[] { 0x0D, 0x0A }, 0, 2); }
// serialize a message in a folder so it can be processed after! protected void Save(TraceMessage msg) { if (String.IsNullOrWhiteSpace(_directory)) { return; // No backup functionality. } var file = Path.Combine(_directory, Guid.NewGuid().ToString()) + ".msglog"; try { var serializer = new DataContractSerializer(typeof(TraceMessage)); serializer.WriteObject(file, msg); } catch (Exception) { // Check if a file is created (happens with a file size equal to zero or incomplete serialization or... // Message is lost. Delete(file); } }
protected abstract void ProcessMessage(TraceMessage message);