EntLib 5 Изменение местоположения ведения журнала во время выполнения

#c# #enterprise-library

#c# #корпоративная библиотека

Вопрос:

Есть ли другой способ изменить местоположение ведения журнала в блоке ведения журнала entlib? В настоящее время у меня есть следующий код для внесения изменений

      var location = CommonConfiguration.ErrorLogPath;
        ConfigurationFileMap configFileMap = new ConfigurationFileMap();
        configFileMap.MachineConfigFilename = "AppName.exe.config";
        var entLibConfig = ConfigurationManager.OpenExeConfiguration(System.Configuration.ConfigurationUserLevel.None);
        LoggingSettings loggingSettings = (LoggingSettings)entLibConfig.GetSection(LoggingSettings.SectionName);
        RollingFlatFileTraceListenerData fileTraceListener = loggingSettings.TraceListeners.Get("Rolling Flat File Trace Listener") as RollingFlatFileTraceListenerData;
        fileTraceListener.FileName = Path.Combine(location, @"LogAppname.log");
        entLibConfig.Save();
  

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

Ответ №1:

Вы можете использовать API Fluent Configuration, например, следующий код модульного тестирования:

      [Test]   
     public void TestLoggingWithFluentConfigurationAPI()   
     {  
         var builder = new ConfigurationSourceBuilder();   
         builder.ConfigureLogging()  
             .WithOptions  
             .DoNotRevertImpersonation()  
             .LogToCategoryNamed("Basic")  
             .SendTo.FlatFile("Basic Log File")  
             .FormatWith(new FormatterBuilder()  
                             .TextFormatterNamed("Text Formatter")  
                             .UsingTemplate(  
                                 "Timestamp: {timestamp}{newline Message: {message}{newline}Category: {category}{newline}"))  
             .ToFile("d:\logs\BasicTest.log") 
             .SendTo.RollingFile("Rolling Log files") 
             .RollAfterSize(1024)  
             .ToFile("d:\logs\RollingTest.log")  
              .LogToCategoryNamed("General")  
      .WithOptions.SetAsDefaultCategory()  
      .SendTo.SharedListenerNamed("Basic Log File");  

         var configSource = new DictionaryConfigurationSource(); 
         builder.UpdateConfigurationWithReplace(configSource);  

         EnterpriseLibraryContainer.Current  
           = EnterpriseLibraryContainer.CreateDefaultContainer(configSource); 
         LogWriterFactory logFactory = new LogWriterFactory(configSource);  
         LogWriter logWriter = logFactory.CreateDefault();  
         logWriter.Write("This is test message", "Basic");  
         logWriter.Write("This is default message");  

         string logfilepath = Path.Combine("d:", "logs\BasicTest.log");  
         Assert.IsTrue(File.Exists(logfilepath)); 
         Assert.IsTrue(File.Exists("d:\logs\RollingTest.log"));

     }
  

Ссылка:
http://msdn.microsoft.com/en-us/library/ff664363 (PandP.50).aspx