Не могу понять трассировку.net 2010 и app.config
В моем app.config я хочу установить 3 уровня трассировки (переключатели?): Подробный, предупреждение и ни одного. В отладочной версии кода я хочу, чтобы был включен подробный переключатель, а в выпуске - предупреждение. В особых случаях пользователи моего приложения могут изменить файл конфигурации, чтобы отключить все трассировки.
Я хочу, чтобы отладочные трассировки выводились на консоль, а выпускать трассировки только в лог-файл.
Я написал следующее:
[...]
<system.diagnostics>
<sources>
<!-- This section defines the logging configuration for My.Application.Log -->
<source name="debug" switchName="debug">
<listeners>
<add name="FileLog"/>
<add name="console"/>
</listeners>
</source>
<source name="release" switchName="release">
<listeners>
<add name="FileLog"/>
</listeners>
</source>
<source name="silent" switchName="none">
<listeners/>
</source>
</sources>
<switches>
<add name="debug" value="Verbose"/>
<add name="release" value="Warning"/>
<add name="none" value="Off"/>
</switches>
<!--<sharedListeners>
<add name="FileLog" type="System.Diagnostics.TextWriterTraceListener" traceOutputOptions="DateTime" initializeData="felix.log"/>
<add name="console" type="System.Diagnostics.ConsoleTraceListener" initializeData="false" />
</sharedListeners>-->
<trace autoflush="false" indentsize="4">
<listeners>
<add name="FileLog" type="System.Diagnostics.TextWriterTraceListener" traceOutputOptions="DateTime" initializeData="felix.log"/>
<add name="console" type="System.Diagnostics.ConsoleTraceListener" initializeData="false"/>
<remove name="Default"/>
</listeners>
</trace>
</system.diagnostics>
[...]
Затем в коде я называю трассировку так:
Public Shared Sub HandleException(ByVal ex As Exception)
Trace.WriteLine(ex.Message, "Error")
[...]
Я думаю, что-то упускаю. Как сказать методу трассировки правильный переключатель для использования?? Как пользователи моего приложения могут изменить файл конфигурации, чтобы разрешить его трассировку или отключить?
Благодарю.
1 ответ
Похоже, вы смешиваете концепцию ведения журнала / трассировки через Trace.Write и Trace.WriteLine с регистрацией / отслеживанием с использованием объектов TraceSource.
Объекты TraceSource позволяют вам индивидуально управлять (с помощью переключателей) "объектами журналирования", так что вы можете включить вход в систему для некоторого вашего кода и выключить для других частей вашего кода. Выходные данные из объектов TraceSource можно настроить для перехода к различным TraceListener (или к одному и тому же TraceListener). Trace.WriteLine не очень гибок. Он может быть настроен только с одним уровнем (т. Е. Глобально вы можете войти в Debug или Info или любым другим), тогда как в случае TraceSources один TraceSource может регистрироваться в Debug, а другой - в Info, в то время как другой может быть полностью выключен.
Посмотрите мои ответы в этих ссылках для некоторых примеров того, как настроить TraceSources и как использовать их в коде.
Как использовать TraceSource в разных классах
Отключение трассировки через app.config
Каков наилучший подход к ведению журнала?
Добавить методы трассировки в System.Diagnostics.TraceListener
Относительно того, как вы хотите, чтобы ваша трассировка / логирование работала в выпуске debug vs, у вас может быть два разных файла app.config. Оба будут определять один и тот же TraceSources (то есть один и тот же набор "именованных" объектов трассировки / ведения журнала). В файле app.config, который будет использоваться с отладочными сборками, вы можете установить для уровня трассировки / ведения журнала одно значение Debug/Info/Wh независимо и вы можете направить вывод в консоль и / или файл и / или что-либо еще. В файле app.config, который будет использоваться с отладочными сборками, вы можете установить для уровня трассировки / ведения журнала другое значение (или Выкл.) И направить вывод в файл.
В оба поста выше я включаю несколько других ссылок на информацию о System.Diagnostics, включая проект Ukadc.Diagnostics. Этот проект предоставляет очень интересную возможность форматирования для использования с TraceListeners на основе System.Diagnostics (при условии, что слушатели исходят из Ukadc.Diagnostics) без каких-либо изменений в ваших реальных операторах трассировки / регистрации. Возможность форматирования аналогична возможностям log4net и NLog.
Прочитайте информацию, которую я связал выше, и посмотрите, поможет ли это. Попробуйте использовать TraceSources, а не только Trace.WriteLine. Когда вам это удобно, возможно, загляните в Ukadc.Diagnostics.