static void Main()

in packages/csharp/PortingAssistant/PortingAssistant.Api/Program.cs [21:92]


        static void Main(string[] args)
        {
            if (args.Length < 3)
            {
                throw new ArgumentException("Must provide a config file, aws profile and path");
            }
            var config = args[0];
            var isConsole = args.Length == 4 && args[3].Equals("--console");

            var outputTemplate = "[{Timestamp:yyyy-MM-dd HH:mm:ss} {Level:u3}] {SourceContext}: {Message:lj}{NewLine}{Exception}";
            if (args.Length == 4 && !args[3].Equals("--console"))
            {
                // Args[3] is version number if not --console
                outputTemplate = "[{Timestamp:yyyy-MM-dd HH:mm:ss} {Level:u3}] (" + args[3] + ") {SourceContext}: {Message:lj}{NewLine}{Exception}";
            }

            Serilog.Formatting.Display.MessageTemplateTextFormatter tf =
                new Serilog.Formatting.Display.MessageTemplateTextFormatter(outputTemplate, CultureInfo.InvariantCulture);

            var date = DateTime.Today.ToString("yyyy-MM-dd");
            var logConfiguration = new LoggerConfiguration().Enrich.FromLogContext()
                .MinimumLevel.Debug()
                .WriteTo.RollingFile(
                    Path.Combine(args[2], "logs", "portingAssistant-assessment-{Date}.log"),
                    outputTemplate: outputTemplate)
                .WriteTo.Logger(lc => lc.MinimumLevel.Error().WriteTo.RollingFile(
                    Path.Combine(args[2], "logs", "portingAssistant-backend-{Date}.log"), 
                    outputTemplate: outputTemplate)
                    );

            if (isConsole)
            {
                logConfiguration = logConfiguration.WriteTo.Console();
            }

            Log.Logger = logConfiguration.CreateLogger();

            var portingAssistantPortingConfiguration = JsonSerializer.Deserialize<PortingAssistantPortingConfiguration>(File.ReadAllText(config));
            var configuration = new PortingAssistantConfiguration();
            configuration.DataStoreSettings.HttpsEndpoint = portingAssistantPortingConfiguration.PortingAssistantConfiguration.DataStoreSettings.HttpsEndpoint;
            configuration.DataStoreSettings.S3Endpoint = portingAssistantPortingConfiguration.PortingAssistantConfiguration.DataStoreSettings.S3Endpoint;
            configuration.DataStoreSettings.GitHubEndpoint = portingAssistantPortingConfiguration.PortingAssistantConfiguration.DataStoreSettings.GitHubEndpoint;

            var contributionConfiguration = new CustomerContributionConfiguration();
            contributionConfiguration.CustomerFeedbackEndpoint = portingAssistantPortingConfiguration.CustomerContributionConfiguration.CustomerFeedbackEndpoint;
            contributionConfiguration.RuleContributionEndpoint = portingAssistantPortingConfiguration.CustomerContributionConfiguration.RuleContributionEndpoint;

            string metricsFolder = Path.Combine(args[2], "logs");
            string metricsFilePath = Path.Combine(metricsFolder, $"portingAssistant-telemetry-{DateTime.Today.ToString("yyyyMMdd")}.metrics");


            var telemetryLogConfiguration = new LoggerConfiguration().Enrich.FromLogContext()
                .MinimumLevel.Debug()
                .WriteTo.RollingFile(
                    Path.Combine(args[2], "logs", "portingAssistantTelemetry.log"),
                    outputTemplate: outputTemplate);
            TelemetryCollector.Builder(telemetryLogConfiguration.CreateLogger(), metricsFilePath);

            var serviceCollection = new ServiceCollection();
            ConfigureServices(serviceCollection, configuration);

            try
            {
                var application = new Application(serviceCollection, contributionConfiguration);
                application.SetupConnection(isConsole);
                application.Start();
            }
            finally
            {
                Log.CloseAndFlush();
            }
        }