2010-09-15 4 views
1

Я пытаюсь создать настройку на своем веб-сайте ASP.NET, что позволяет мне включать/отключать ведение журнала, пока приложение работает в любой момент. Я полагаю, что некоторые из вас уже сделали такое.Как включить/отключить ведение журнала в ASP.NET

Вот суть того, что я пытаюсь сделать:

if(ShouldBeLogging) 
logger.Info("helloooooo there"); 

Так как вы создали логическое значение ShouldBeLogging, чтобы иметь возможность быть включен/выключен, а сайт работает без получения какой-либо серьезные недостатки в производительности (видя, как к ним часто обращаются)?

Я думал о том, чтобы поместить что-то в файл web.config, но не изменил бы этот удар моим сеансам пользователя, если бы я хотел его включить?

Спасибо!

+0

Что касается последнего пункта - это зависит от того, какой механизм хранения сеанса вы используете. Если вы используете InProc (данные сеанса хранятся в памяти), тогда да. Если вы используете что-то более постоянное, как база данных SQL для хранения данных сеанса, то все существующие сеансы пользователя будут пережить перезапуск домена приложения, вызванный изменением web.config. – Tomas

ответ

0

Я решил пойти с log4net, который поддерживает эту точную функциональность. Вы можете поместить строку в вашем AssemblyInfo.cs как:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "config\\log4net.config", Watch = true)] 

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

if(log.IsDebugEnabled) 
    log.Debug("write a debug message to the logger"); 

см http://logging.apache.org/log4net/release/manual/internals.html для получения дополнительной информации.

0

Да, изменение в файле web.config приведет к перезагрузке приложения, а сеанс будет потерян в зависимости от вашего хранилища сеансов.

Накладные расходы на выполнение булевой проверки минимальны, но это кошмар для обслуживания.

Почему бы вам просто не использовать Enterprise Library Logging Application Block, который уже внешне настраивается? Ссылка на то, что вы пытаетесь сделать бы здесь Checking Filter Status before Logging

Если вы решите, что вам действительно хочет, чтобы переключить вход через если чеки простое решения является псевдо добавить значение для вашего web.config AppSettings

<appSettings> 
    <add key="DiagnosticLogging" value="true" /> 
</appSettings> 

И тогда в вашей глобальной Page общественной статической ReadOnly Boolean LoggingEnabled {получить;}

Application_Start(..){ 
     string log = ConfigurationSettings.AppSettings["DiagnosticLogging"]; 
     LoggingEnabled = false; 
     if(!string.IsNullOrEmpty(log)){ 
      if(!boolean.TryParse(out LoggingEnabled)){ 
        //bad application setting.. handle 
       } 
     }  
    } 
0

встроенная диагностика/отслеживания может быть наилучшим образом подходит для ваших нужд, то есть увидеть http://www.beansoftware.com/ASP.NET-Tutorials/Tracing-ASP.NET.aspx

образец для web.config:

<configuration> 
    <appSettings/> 
    <connectionStrings/> 
    <system.web> 
     <compilation debug="false" /> 
     <authentication mode="Windows" /> 
     <trace enabled ="true" pageOutput ="false" requestLimit ="20" traceMode ="SortByTime " /> 


</system.web> 

Смежные вопросы