private string TraceEntriesToString(IEnumerable<TraceEntry> entries)
{
const string columnText = " | ";
int maxTypeLength = Levels.Max(c => c.ToString("G").Length);
var rv = new StringBuilder();
var rxMultiline = new Regex(@"(?<=(^|\n)).*", RegexOptions.Multiline | RegexOptions.Compiled);
if (entries != null)
{
foreach (var entry in entries)
{
string date = entry.Time.ToString(CultureInfo.CurrentCulture);
string type = entry.LogEvent.ToString("G").PadRight(maxTypeLength, ' ');
string datefiller = new String(' ', date.Length);
string typefiller = new String(' ', type.Length);
string message = entry.Message;
var matches = rxMultiline.Matches(message);
if (matches.Count > 0)
{
rv.AppendFormat("{0}{4}{1}{4}{2}{3}", date, type, matches[0].Value, Environment.NewLine, columnText);
if (matches.Count > 1)
{
for (int idx = 1, max = matches.Count; idx < max; idx++)
{
rv.AppendFormat("{0}{4}{1}{4}{2}{3}", datefiller, typefiller, matches[idx].Value, Environment.NewLine, columnText);
}
}
}
}
}
return rv.ToString();
}
#endregion