2015-08-26 4 views
0

Я хочу добавить трассировку журнала событий в мое приложение winforms, но в этом не понимаю.Использовать EventLogTraceListener в течение всего срока службы приложения в winforms?

Что я сделал это за шаги: В моем app.config:

<system.diagnostics> 
     <trace autoflush="true" indentsize="4"> 
     <listeners> 
      <add name="myListener" type="System.Diagnostics.EventLogTraceListener" initializeData="MyApplication"/> 
      <remove name="Default" /> 
     </listeners> 
     </trace> 
    </system.diagnostics> 
  • Базовый класс регистратор так:

    с использованием системы; с использованием System.Diagnostics;

    имен LogEventSample { общественный статический класс Logger { государственной статической силы Error (строка сообщения, модуль строка) { WriteEntry (сообщение "ошибка", модуль); }

    public static void Error(Exception ex, string module) 
        { 
         WriteEntry(ex.Message, "error", module); 
        } 
    
        public static void Warning(string message, string module) 
        { 
         WriteEntry(message, "warning", module); 
        } 
    
        public static void Info(string message, string module) 
        { 
         WriteEntry(message, "info", module); 
        } 
    
        private static void WriteEntry(string message, string type, string module) 
        { 
         Trace.WriteLine(string.Format("{0},{1},{2},{3}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), type, module, message)); 
        } 
    } 
    

    }

А потом, когда мне нужна строка:

Logger.Info("working...", "MyApp"); 

Мои сомнения приходит со временем жизни приложения. Это повлияет на производительность приложения? Должен ли я сделать это по-другому?

Кроме того, как я могу хранить дополнительную информацию, когда я это делаю? я не говорю о сохранении некоторой строки исключения, но для сохранения более подробных данных, которые будут отображаться в средстве просмотра событий.

ответ

1

Как вы это делаете, это стандартный способ отслеживания обратной связи приложений в .NET, поэтому он не должен быть «неправильным».

Также не влияет ваша производительность приложения, так как вызовы Trace.WriteLine разрешены только в рамках отладочной сборки. Если вы посмотрите на определение, вы заметите, что он аннотируется с атрибутом Conditional("TRACE"). Поэтому, если вы измените свой профиль сборки на «Release», свойство «Define TRACE-constant» вашего проекта будет отключено (по умолчанию), и вы не увидите никакого вывода трассировки (даже в вашем журнале, поэтому проверьте, является ли это вашим желаемое поведение!).

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

Если вы хотите получить больше контроля над тем, как данные будут регистрироваться, я готов поспорить, что вы лучше всего работаете с хорошей структурой ведения журнала, например Semantic Logging или Log4Net.

+0

Я хочу регистрировать события в профиле выпуска в своем последнем клиентском приложении, чтобы клиент отслеживал некоторые действия в приложении. «Трейс» не подходит для этого? Yo сказать, что мне нужно будет использовать Log4Net? –

+0

Если вы хотите включить вывод 'Trace', просто проверьте * Define TRACE-Constant * вашего проекта после того, как вы изменили свой профиль сборки на * Release *. Решение для определенной структуры регистрации зависит от многих факторов и не является частью вашего вопроса. Для получения дополнительной информации об этом проверьте [этот вопрос] (http://stackoverflow.com/questions/576185/logging-best-practices) – Carsten

+0

Думаю, я поеду на этот вариант. Потому что я не хочу просто хранить ошибки, но я хочу регистрировать некоторые действия, которые мой клиент должен регистрировать.Кроме того, можно записывать больше информации, кроме простой (или сложной) строки? –