using PostSharp.Patterns.Diagnostics;
using PostSharp.Patterns.Diagnostics.Backends.EventSource;
using PostSharp.Samples.Logging.BusinessLogic;
 
// Add logging to all methods of this project.
[assembly: Log]
 
namespace PostSharp.Samples.Logging.Etw.CustomSource
{
  [Log(AttributeExclude = true)]   // Removes logging from the Program class itself.
  internal class Program
  {
    private static void Main(string[] args)
    {
      var eventSourceBackend = new EventSourceLoggingBackend(new MyEventSource());
      if (eventSourceBackend.EventSource.ConstructionException != null)
      {
        throw eventSourceBackend.EventSource.ConstructionException;
      }
 
      LoggingServices.DefaultBackend = eventSourceBackend;
 
      // Simulate some business logic.
      QueueProcessor.ProcessQueue(@".\Private$\SyncRequestQueue");
 
      // To collect and view the log:
      //   1. Download PerfView from https://www.microsoft.com/en-us/download/details.aspx?id=28567.
      //   2. Execute: perfview.exe collect -OnlyProviders:*MyEventSource
      //   3. Execute this program.
      //   4. In PerfView, click 'Stop collecting', then in the PerfView tree view click 'PerfViewData.etl.zip' and finally 'Events'.
    }
  }
}