Этот ответ запаздывает, но ...
Я думаю, вы должны рассмотреть возможность использования TraceSources, а не Debug.WriteLine и/или Trace.WriteLine. С помощью TraceSources вы можете добиться более высокого уровня контроля за протоколированием. Уровень каждого TraceSource можно контролировать, как и пункт назначения TraceSource (TraceListener). Вы можете написать код так:
public class RectToSqlServer : IDatabaseUtilities
{
private static readonly TraceSource ts = new TraceSource("RectToSqlServer");
public void AddRectToDatabase(object record)
{
ts.TraceEvent(TraceEventType.Information, "record = {0}", record.ToString());
//Add record to database ...
}
}
public class RectToOracle : IDatabaseUtilities
{
private static readonly TraceSource ts = new TraceSource("RectToOracleServer");
public void AddRectToDatabase(object record)
{
ts.TraceEvent(TraceEventType.Information, "record = {0}", record.ToString());
//Add record to database ...
}
}
Теперь вы можете контролировать ведение журнала (уровень, пункт назначения и т.д.) для каждого класса независимо друг от друга. Кроме того, обратите внимание, что вам не нужно добавлять Trace.WriteLine и Debug.WriteLine для регистрации в сборках отладки и выпуска. Использование TraceSources позволит вам использовать ETW в будущем, так как есть ETWTraceListener, доступный начиная с .NET (возможно, 3.5, конечно, на 4.0). НО эта конкретная функциональность ETW доступна только в Vista и более поздних версиях ОС.
Чтобы добавить способность к System.Diagnostics (в первую очередь, возможно, только при регистрации через TraceSource), посмотрите на Ukadc.Diagnostics. Ukadc.Diagnostics добавляет довольно классную возможность форматирования (подобно тому, что вы можете делать с log4net и NLog) в System.Diagnostics. Нет зависимости от кода (просто установите Ukadc.Diagnostics и добавьте некоторую конфигурацию в ваш app.config). Я должен сказать, что я думаю, что это действительно круто.
Если вы хотите внести свой небольшой вклад в TraceSources, см. here для интересной реализации оболочки TraceSource, которая по существу дает TraceSources возможность «наследовать» регистрацию конфигурации из «предков» TraceSources (например, как log4net и NLog loggers могут наследовать параметры ведения журнала).
Спасибо RaYell, извините за плохой образец, который я только что сформулировал. – mamu