Отключите фильтр LogEnabled во время выполнения - ведение журнала корпоративного приложения - PullRequest
0 голосов
/ 04 мая 2010

так что история пойдет так:

Я использую блок приложения Logging Enterprise, предоставленный Microsoft, для регистрации событий в нашем приложении.

Цель - включить ведение журнала просмотра событий при загрузке и затем отключить его.

Что я сделал, так это добавил EventLog TraceListener, который записывает все наши журналы в программу просмотра событий. То, что я пытаюсь сделать, это отключить его после завершения загрузки приложения. Единственный способ, которым я могу воспользоваться, - это добавить фильтр LogEnabled, а затем отключить его.

Однако я не знаю, как получить доступ к этому фильтру во время выполнения и отключить вход в систему этого прослушивателя.

если у вас есть идея, пожалуйста, поделитесь.

Спасибо

1 Ответ

1 голос
/ 05 мая 2010

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

Мне кажется, что вы хотите, чтобы ваше приложение регистрировало некоторые сообщения во время запуска, а затем не регистрировало больше сообщений. Я предполагаю, что вы явно знаете, когда вы закончите регистрировать сообщения запуска.

Если вышеприведенное верно, я думаю, что самый простой способ - использовать свойство Приоритет LogEntry.

В настройках файла конфигурации приоритетный фильтр с минимальным приоритетом 2:

<logFilters>
  <add minimumPriority="2" maximumPriority="2147483647" type="Microsoft.Practices.EnterpriseLibrary.Logging.Filters.PriorityFilter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=null"
    name="Priority" />
  <add enabled="true" type="Microsoft.Practices.EnterpriseLibrary.Logging.Filters.LogEnabledFilter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=null"
    name="LogEnabled Filter" />
</logFilters>

Затем при запуске используйте приоритет 2 (или больше) для регистрации ваших сообщений. Затем, когда вы знаете, что все готово, установите приоритет до 1.

Я бы лучше его инкапсулировал, но пример кода выглядел бы так:

public class MyApp
{
    public static int LogPriority = 2;
    public static readonly string MyAppCategory = "MyAppCategory";

    static void Main()
    {
        Logger.Write("Loading 1...", MyAppCategory, LogPriority);
        // ...       
        Logger.Write("Loading 2...", MyAppCategory, LogPriority);

        // Done loading so turn off logging
        LogPriority = 1;

        Logger.Write("Message not logged", MyAppCategory, LogPriority);
    }
}


Теперь, если вы когда-нибудь захотите включить ведение журнала для остальной части вашего приложения, просто уменьшите фильтр приоритетов с 2 до 1, и все будет зарегистрировано.

...