title: Consecutive logging with Microsoft Enterprise Library LogWriter
body: <p>I have a C# .NET application using Enterprise Library 6.0 for logging.
  I have declared one trace listener for database logging and another trace listener for flat file logging. And prepared them for handling same log category "General". </p>
  
  <p>In my application when i call LogWriter.Write("Test Log", "General");
  everything is fine i see the "Test Log" in database and flat file as well.</p>
  
  <p>But if one of them fails; For example when i call LogWriter.Write("Test Log", "General"); assume that the database is inaccessible. I expect from LogWriter just write the data into flat file.</p>
  
  <p>Unfortunately i don't see any log written both in flat file and database. Is it usual?
  And is it possible to configure logging mechanism for consecutive logging? ( like if one of trace listeners fails continue with next trace listener)</p>
  
  <p>Here is my logging configuration</p>
  
  <pre><code>public static LoggingConfiguration BuildConfig()
  {
      string baseFilePath = @"C:\LogDirectory";
      DatabaseProviderFactory factory = new DatabaseProviderFactory(new SystemConfigurationSource(false).GetSection);
      DatabaseFactory.SetDatabaseProviderFactory(factory, false);
  
      // Formatters
      TextFormatter briefFormatter = new TextFormatter("Timestamp: {timestamp(local)}{newline}Message: {message}{newline}Category: {category}{newline}Priority: {priority}{newline}EventId: {eventid}{newline}ActivityId: {property(ActivityId)}{newline}Severity: {severity}{newline}Title:{title}{newline}");
      TextFormatter extendedFormatter = new TextFormatter("Timestamp: {timestamp}{newline}Message: {message}{newline}Category: {category}{newline}Priority: {priority}{newline}EventId: {eventid}{newline}Severity: {severity}{newline}Title: {title}{newline}Activity ID: {property(ActivityId)}{newline}Machine: {localMachine}{newline}App Domain: {localAppDomain}{newline}ProcessId: {localProcessId}{newline}Process Name: {localProcessName}{newline}Thread Name: {threadName}{newline}Win32 ThreadId:{win32ThreadId}{newline}Extended Properties: {dictionary({key} - {value}{newline})}");
  
      var databaseTraceListener = new FormattedDatabaseTraceListener(DatabaseFactory.CreateDatabase("DefaultDB"), "WriteLog", "AddCategory", extendedFormatter);
      var flatFileTraceListener = new FlatFileTraceListener(baseFilePath + @"\FlatFile.log", "----------------------------------------", "----------------------------------------", briefFormatter);
  
      LoggingConfiguration config = new LoggingConfiguration();
  
      //Log Sources
      config.AddLogSource("General",SourceLevels.All,true);
  
      //Match Trace Listeners For Log Sources
      config.LogSources["General"].AddTraceListener(databaseTraceListener);
      config.LogSources["General"].AddTraceListener(flatFileTraceListener);
  
      return config;
  }
  </code></pre>
  
  <p>Here is where I do logging in my app:</p>
  
  <pre><code>public void DoSampleLogging()
  {
      LogWriter defaultWriter;
      LoggingConfiguration loggingConfiguration;
  
      loggingConfiguration = LoggingHelper.BuildConfig();
      defaultWriter = new LogWriter(loggingConfiguration);
  
      defaultWriter.Write("Test Log", "General");
  }
  </code></pre>