Форматирование вывода трассировки

Вы можете создать метод расширения, подобный ToDictionary (), с той разницей, что он позволяет дублировать. Что-то вроде:

    public static Dictionary<TKey, TElement> SafeToDictionary<TSource, TKey, TElement>(
        this IEnumerable<TSource> source, 
        Func<TSource, TKey> keySelector, 
        Func<TSource, TElement> elementSelector, 
        IEqualityComparer<TKey> comparer = null)
    {
        var dictionary = new Dictionary<TKey, TElement>(comparer);

        if (source == null)
        {
            return dictionary;
        }

        foreach (TSource element in source)
        {
            dictionary[keySelector(element)] = elementSelector(element);
        }

        return dictionary; 
    }

В этом случае, если есть дубликаты, то выигрывает последнее значение.

14
задан RaYell 27 July 2009 в 13:53
поделиться

5 ответов

Я предлагаю вам вместо этого использовать Log4Net , который имеет гораздо больше возможностей настройки.

В качестве альтернативы вы можете написать свою собственную реализацию TraceListener которые ставят метки времени для вас. Вы можете даже просто унаследовать от TextWriterTraceListener и переопределить Write и WriteLine :

public override void Write(string x)
{
     // Use whatever format you want here...
     base.Write(string.Format("{0:r}: {1}", DateTime.UtcNow, x));
}

public override void WriteLine(string x)
{
     // Use whatever format you want here...
     base.WriteLine(string.Format("{0:r}: {1}", DateTime.UtcNow, x));
}

Как отмечено в комментариях, это заканчивается с дублированием даты для TraceInformation , потому что это дважды вызывает Write . Определенно лучше использовать "правильную" структуру ведения журнала.

14
ответ дан 1 December 2019 в 10:19
поделиться

Вы можете написать свой собственный подкласс TextWriterTraceListener, который переопределяет методы WriteLine, украшает строку, а затем передает декорированную строку реализации базового класса для фактического вывода.

1
ответ дан 1 December 2019 в 10:19
поделиться

Рассмотрите возможность использования Блок приложения ведения журнала

-1
ответ дан 1 December 2019 в 10:19
поделиться

Не совсем ответ на ваш вопрос, но рассматривали ли вы возможность просто использовать log4Net ?

Вы можете настроить его для добавления времени и т. Д., А также большого количества других полезные функции.

-1
ответ дан 1 December 2019 в 10:19
поделиться

Или просто добавьте DateTime в качестве параметра traceOutputOption.

1
ответ дан 1 December 2019 в 10:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: