Best Vstest code snippet using Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Client.TestLoggerManager.InitializeLogger
TestLoggerManager.cs
Source:TestLoggerManager.cs  
...128                var loggerInitialized = false;129                // Try initializing logger by type.130                if (!string.IsNullOrWhiteSpace(logger.AssemblyQualifiedName))131                {132                    loggerInitialized = InitializeLoggerByType(logger.AssemblyQualifiedName, logger.CodeBase, parameters);133                }134                // Try initializing logger by uri.135                if (!loggerInitialized &&136                    !string.IsNullOrWhiteSpace(logger.Uri?.ToString()))137                {138                    loggerInitialized = InitializeLoggerByUri(logger.Uri, parameters);139                }140                // Try initializing logger by friendly name.141                if (!loggerInitialized &&142                    TryGetUriFromFriendlyName(logger.FriendlyName, out var loggerUri) &&143                    loggerUri != null)144                {145                    loggerInitialized = InitializeLoggerByUri(loggerUri, parameters);146                }147                // Output error if logger is not initialized.148                if (!loggerInitialized)149                {150                    var value = !string.IsNullOrWhiteSpace(logger.AssemblyQualifiedName)151                        ? logger.AssemblyQualifiedName152                        : !string.IsNullOrWhiteSpace(logger.Uri?.ToString())153                            ? logger.Uri.ToString()154                            : logger.FriendlyName;155                    throw new InvalidLoggerException(156                        string.Format(157                            CultureInfo.CurrentUICulture,158                            CommonResources.LoggerNotFound,159                            value));160                }161            }162            requestData.MetricsCollection.Add(TelemetryDataConstants.LoggerUsed, string.Join<Type>(",", this.initializedLoggers.ToArray()));163        }164        /// <summary>165        /// Handles test run message event.166        /// </summary>167        /// <param name="e">TestRunMessage event args.</param>168        public void HandleTestRunMessage(TestRunMessageEventArgs e)169        {170            if (this.isDisposed)171            {172                EqtTrace.Warning("TestLoggerManager.HandleTestRunMessage: Ignoring as the object is disposed.");173                return;174            }175            this.loggerEvents.RaiseTestRunMessage(e);176        }177        /// <summary>178        /// Handle test run stats change event.179        /// </summary>180        /// <param name="e">TestRunChanged event args.</param>181        public void HandleTestRunStatsChange(TestRunChangedEventArgs e)182        {183            if (this.isDisposed)184            {185                EqtTrace.Warning("TestLoggerManager.HandleTestRunStatsChange: Ignoring as the object is disposed.");186                return;187            }188            foreach (TestResult result in e.NewTestResults)189            {190                this.loggerEvents.RaiseTestResult(new TestResultEventArgs(result));191            }192        }193        /// <summary>194        /// Handles test run start event.195        /// </summary>196        /// <param name="e">TestRunStart event args.</param>197        public void HandleTestRunStart(TestRunStartEventArgs e)198        {199            if (this.isDisposed)200            {201                EqtTrace.Warning("TestLoggerManager.HandleTestRunStart: Ignoring as the object is disposed.");202                return;203            }204            this.loggerEvents.RaiseTestRunStart(e);205        }206        /// <summary>207        /// Handles test run complete.208        /// </summary>209        /// <param name="e">TestRunComplete event args.</param>210        public void HandleTestRunComplete(TestRunCompleteEventArgs e)211        {212            if (!this.isDisposed)213            {214                try215                {216                    this.loggerEvents.CompleteTestRun(e.TestRunStatistics, e.IsCanceled, e.IsAborted, e.Error,217                        e.AttachmentSets, e.ElapsedTimeInRunningTests);218                }219                finally220                {221                    this.Dispose();222                }223            }224            else225            {226                // Note: We are not raising warning in case testLoggerManager is disposed as HandleRawMessage and HandleTestRunComplete both can call HandleTestRunComplete.227                EqtTrace.Verbose("TestLoggerManager.HandleTestRunComplete: Ignoring as the object is disposed.");228            }229        }230        /// <summary>231        /// Handles discovery message event.232        /// </summary>233        /// <param name="e">TestRunMessage event args.</param>234        public void HandleDiscoveryMessage(TestRunMessageEventArgs e)235        {236            if (this.isDisposed)237            {238                EqtTrace.Warning("TestLoggerManager.HandleDiscoveryMessage: Ignoring as the object is disposed.");239                return;240            }241            this.loggerEvents.RaiseDiscoveryMessage(e);242        }243        /// <summary>244        /// Handle discovered tests.245        /// </summary>246        /// <param name="e">DiscoveredTests event args.</param>247        public void HandleDiscoveredTests(DiscoveredTestsEventArgs e)248        {249            if (this.isDisposed)250            {251                EqtTrace.Warning("TestLoggerManager.HandleDiscoveredTests: Ignoring as the object is disposed.");252                return;253            }254            this.loggerEvents.RaiseDiscoveredTests(e);255        }256        /// <summary>257        /// Handles discovery complete event.258        /// </summary>259        /// <param name="e">DiscoveryComplete event args.</param>260        public void HandleDiscoveryComplete(DiscoveryCompleteEventArgs e)261        {262            if (!this.isDisposed)263            {264                try265                {266                    this.loggerEvents.RaiseDiscoveryComplete(e);267                }268                finally269                {270                    this.Dispose();271                }272            }273            else274            {275                // Note: We are not raising warning in case testLoggerManager is disposed as HandleRawMessage and HandleDiscoveryComplete both can call HandleDiscoveryComplete.276                EqtTrace.Verbose("TestLoggerManager.HandleDiscoveryComplete: Ignoring as the object is disposed.");277            }278        }279        /// <summary>280        /// Handles discovery start event.281        /// </summary>282        /// <param name="e">DiscoveryStart event args.</param>283        public void HandleDiscoveryStart(DiscoveryStartEventArgs e)284        {285            if (this.isDisposed)286            {287                EqtTrace.Warning("TestLoggerManager.HandleDiscoveryStart: Ignoring as the object is disposed.");288                return;289            }290            this.loggerEvents.RaiseDiscoveryStart(e);291        }292        /// <summary>293        /// Ensure that all pending messages are sent to the loggers.294        /// </summary>295        public void Dispose()296        {297            this.Dispose(true);298            // Use SupressFinalize in case a subclass299            // of this type implements a finalizer.300            GC.SuppressFinalize(this);301        }302        #endregion303        /// <summary>304        /// Initializes logger with the specified URI and parameters.305        /// For ex. TfsPublisher takes parameters such as  Platform, Flavor etc.306        /// </summary>307        /// <param name="uri">URI of the logger to add.</param>308        /// <param name="parameters">Logger parameters.</param>309        /// <returns>Logger Initialized flag.</returns>310        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2234:PassSystemUriObjectsInsteadOfStrings", Justification = "Case insensitive needs to be supported "), SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Justification = "Third party loggers could potentially throw all kinds of exceptions.")]311        internal bool InitializeLoggerByUri(Uri uri, Dictionary<string, string> parameters)312        {313            ValidateArg.NotNull<Uri>(uri, "uri");314            this.CheckDisposed();315            // Look up the extension and initialize it if one is found.316            var extensionManager = this.TestLoggerExtensionManager;317            var logger = extensionManager.TryGetTestExtension(uri.AbsoluteUri);318            if (logger == null)319            {320                return false;321            }322            // If the logger has already been initialized just return.323            if (this.initializedLoggers.Contains(logger.Value.GetType()))324            {325                EqtTrace.Verbose("TestLoggerManager: Skipping duplicate logger initialization: {0}", logger.Value.GetType());326                return true;327            }328            // Initialize logger.329            var initialized = InitializeLogger(logger.Value, logger.Metadata.ExtensionUri, parameters);330            // Add logger in initializedLoggers list.331            if (initialized)332            {333                this.initializedLoggers.Add(logger.Value.GetType());334            }335            return initialized;336        }337        /// <summary>338        /// Tries to get uri of the logger corresponding to the friendly name. If no such logger exists return null.339        /// </summary>340        /// <param name="friendlyName">The friendly Name.</param>341        /// <param name="loggerUri">The logger Uri.</param>342        /// <returns><see cref="bool"/></returns>343        internal bool TryGetUriFromFriendlyName(string friendlyName, out Uri loggerUri)344        {345            var extensionManager = this.TestLoggerExtensionManager;346            foreach (var extension in extensionManager.TestExtensions)347            {348                if (string.Compare(friendlyName, extension.Metadata.FriendlyName, StringComparison.OrdinalIgnoreCase) == 0)349                {350                    try351                    {352                        loggerUri = new Uri(extension.Metadata.ExtensionUri);353                    }354                    catch (UriFormatException)355                    {356                        loggerUri = null;357                        throw new InvalidLoggerException(358                            string.Format(359                                CultureInfo.CurrentUICulture,360                                CommonResources.LoggerUriInvalid,361                                extension.Metadata.ExtensionUri));362                    }363                    return true;364                }365            }366            loggerUri = null;367            return false;368        }369        /// <summary>370        /// Gets the test results directory.371        /// </summary>372        /// <param name="runSettings">Test run settings.</param>373        /// <returns>Test results directory</returns>374        internal string GetResultsDirectory(string runSettings)375        {376            string resultsDirectory = null;377            if (runSettings != null)378            {379                try380                {381                    RunConfiguration runConfiguration = XmlRunSettingsUtilities.GetRunConfigurationNode(runSettings);382                    resultsDirectory = RunSettingsUtilities.GetTestResultsDirectory(runConfiguration);383                }384                catch (SettingsException se)385                {386                    if (EqtTrace.IsErrorEnabled)387                    {388                        EqtTrace.Error("TestLoggerManager.GetResultsDirectory: Unable to get the test results directory: Error {0}", se);389                    }390                }391            }392            return resultsDirectory;393        }394        /// <summary>395        /// Enables sending of events to the loggers which are registered.396        /// </summary>397        /// <remarks>398        /// By default events are disabled and will not be raised until this method is called.399        /// This is done because during logger initialization, errors could be sent and we do not400        /// want them broadcast out to the loggers until all loggers have been enabled.  Without this401        /// all loggers would not receive the errors which were sent prior to initialization finishing.402        /// </remarks>403        internal void EnableLogging()404        {405            this.CheckDisposed();406            this.loggerEvents.EnableEvents();407        }408        /// <summary>409        /// Ensure that all pending messages are sent to the loggers.410        /// </summary>411        /// <param name="disposing">412        /// The disposing.413        /// </param>414        internal virtual void Dispose(bool disposing)415        {416            if (!this.isDisposed)417            {418                if (disposing)419                {420                    this.loggerEvents.Dispose();421                }422                this.isDisposed = true;423            }424        }425        /// <summary>426        /// Get parameters from configuration element.427        /// </summary>428        /// <param name="configuration"></param>429        /// <returns></returns>430        private Dictionary<string, string> GetParametersFromConfigurationElement(XmlElement configuration)431        {432            var configurationManager = new LoggerNameValueConfigurationManager(configuration);433            return configurationManager.NameValuePairs;434        }435        /// <summary>436        /// Initialize logger with the specified type and parameters.437        /// </summary>438        /// <param name="assemblyQualifiedName">Assembly qualified name.</param>439        /// <param name="codeBase">Code base.</param>440        /// <param name="parameters">Logger parameters.</param>441        /// <returns>Logger Initialized flag.</returns>442        private bool InitializeLoggerByType(string assemblyQualifiedName, string codeBase, Dictionary<string, string> parameters)443        {444            this.CheckDisposed();445            try446            {447                // Load logger assembly.448                Assembly assembly = this.assemblyLoadContext.LoadAssemblyFromPath(codeBase);449                var loggerType =450                    assembly?.GetTypes()451                        .FirstOrDefault(x => x.AssemblyQualifiedName.Equals(assemblyQualifiedName));452                // Create logger instance453                var constructorInfo = loggerType?.GetConstructor(Type.EmptyTypes);454                var logger = constructorInfo?.Invoke(new object[] { });455                // Handle logger null scenario.456                if (logger == null)457                {458                    return false;459                }460                // If the logger has already been initialized just return.461                if (this.initializedLoggers.Contains(logger.GetType()))462                {463                    EqtTrace.Verbose("TestLoggerManager: Skipping duplicate logger initialization: {0}", logger.GetType());464                    return true;465                }466                // Get Logger instance and initialize.467                var initialized = InitializeLogger(logger, null, parameters);468                // Add logger in initializedLoggers list.469                if (initialized)470                {471                    this.initializedLoggers.Add(logger.GetType());472                }473                return initialized;474            }475            catch (Exception ex)476            {477                EqtTrace.Error(478                    "TestLoggerManager: Error occured while initializing the Logger assemblyQualifiedName : {0}, codeBase : {1} , Exception Details : {2}", assemblyQualifiedName, codeBase, ex);479                return false;480            }481        }482        private bool InitializeLogger(object logger, string extensionUri, Dictionary<string, string> parameters)483        {484            if (logger == null)485            {486                return false;487            }488            try489            {490                switch (logger)491                {492                    case ITestLoggerWithParameters _:493                        ((ITestLoggerWithParameters)logger).Initialize(loggerEvents,494                            UpdateLoggerParameters(parameters));495                        break;496                    case ITestLogger _:...InitializeLogger
Using AI Code Generation
1using Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Client;2using Microsoft.VisualStudio.TestPlatform.ObjectModel;3using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client;4using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging;5using System;6using System.Collections.Generic;7using System.Linq;8using System.Text;9using System.Threading.Tasks;10{11    [FriendlyName("CustomLogger")]12    {13        public void Initialize(TestLoggerEvents events, string testResultsDirPath)14        {15            events.TestRunMessage += Events_TestRunMessage;16            events.TestResult += Events_TestResult;17            events.TestRunComplete += Events_TestRunComplete;18        }19        private void Events_TestRunComplete(object sender, TestRunCompleteEventArgs e)20        {21            Console.WriteLine("TestRunComplete");22        }23        private void Events_TestResult(object sender, TestResultEventArgs e)24        {25            Console.WriteLine("TestResult");26        }27        private void Events_TestRunMessage(object sender, TestRunMessageEventArgs e)28        {29            Console.WriteLine("TestRunMessage");30        }31    }32}33using Microsoft.VisualStudio.TestPlatform.ObjectModel;34using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging;35using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client;36using System;37using System.Collections.Generic;38using System.Linq;39using System.Text;40using System.Threading.Tasks;41{42    [FriendlyName("CustomLogger")]43    {44        public void Initialize(TestLoggerEvents events, string testResultsDirPath)45        {46            events.TestRunMessage += Events_TestRunMessage;47            events.TestResult += Events_TestResult;48            events.TestRunComplete += Events_TestRunComplete;49        }50        private void Events_TestRunComplete(object sender, TestRunCompleteEventArgs e)51        {52            Console.WriteLine("TestRunComplete");53        }54        private void Events_TestResult(object sender, TestResultEventArgs e)55        {56            Console.WriteLine("TestResult");57        }58        private void Events_TestRunMessage(object sender, TestRunMessageEventArgs e)59        {60            Console.WriteLine("TestRunMessage");61        }62    }63}64using Microsoft.VisualStudio.TestPlatform.ObjectModel;65using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging;66using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client;67using System;68using System.Collections.Generic;69using System.Linq;70using System.Text;71using System.Threading.Tasks;InitializeLogger
Using AI Code Generation
1using Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Client;2using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client;3using System;4using System.Collections.Generic;5using System.Linq;6using System.Text;7using System.Threading.Tasks;8{9    {10        static void Main(string[] args)11        {12            TestLoggerManager testLoggerManager = new TestLoggerManager();13            testLoggerManager.InitializeLogger("console");14        }15    }16}17using Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Client;18using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client;19using System;20using System.Collections.Generic;21using System.Linq;22using System.Text;23using System.Threading.Tasks;24{25    {26        static void Main(string[] args)27        {28            TestLoggerManager testLoggerManager = new TestLoggerManager();29            testLoggerManager.InitializeLogger("console");30        }31    }32}33using Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Client;34using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client;35using System;36using System.Collections.Generic;37using System.Linq;38using System.Text;39using System.Threading.Tasks;40{41    {42        static void Main(string[] args)43        {44            TestLoggerManager testLoggerManager = new TestLoggerManager();45            testLoggerManager.InitializeLogger("console");46        }47    }48}49using Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Client;50using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client;51using System;52using System.Collections.Generic;53using System.Linq;54using System.Text;55using System.Threading.Tasks;56{57    {58        static void Main(string[] args)59        {60            TestLoggerManager testLoggerManager = new TestLoggerManager();61            testLoggerManager.InitializeLogger("console");62        }63    }64}65using Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Client;66using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client;67using System;InitializeLogger
Using AI Code Generation
1using System;2using System.Collections.Generic;3using System.Linq;4using System.Text;5using System.Threading.Tasks;6using Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Client;7using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client;8using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging;9{10    {11        static void Main(string[] args)12        {13            TestLoggerManager testLoggerManager = new TestLoggerManager();14            testLoggerManager.InitializeLogger("console", "C:\\Users\\User\\Documents\\Visual Studio 2017\\Projects\\ConsoleApp2\\ConsoleApp2\\testlog.txt", null);15            Console.ReadLine();16        }17    }18}19using System;20using System.Collections.Generic;21using System.Linq;22using System.Text;23using System.Threading.Tasks;24using Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Client;25using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client;26using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging;27{28    {29        static void Main(string[] args)30        {31            TestLoggerManager testLoggerManager = new TestLoggerManager();32            testLoggerManager.InitializeLogger("console", "C:\\Users\\User\\Documents\\Visual Studio 2017\\Projects\\ConsoleApp2\\ConsoleApp2\\testlog.txt", null);33            Console.ReadLine();34        }35    }36}37using System;38using System.Collections.Generic;39using System.Linq;40using System.Text;41using System.Threading.Tasks;42using Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Client;43using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client;44using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging;45{46    {47        static void Main(string[] args)48        {49            TestLoggerManager testLoggerManager = new TestLoggerManager();50            testLoggerManager.InitializeLogger("console", "C:\\Users\\User\\Documents\\Visual Studio 2017\\Projects\\ConsoleApp2\\ConsoleApp2\\testlog.txt", null);51            Console.ReadLine();52        }53    }54}InitializeLogger
Using AI Code Generation
1using Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Client;2using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client;3using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging;4using System;5using System.Collections.Generic;6using System.Linq;7using System.Text;8using System.Threading.Tasks;9{10    {11        static void Main(string[] args)12        {13            TestLoggerManager loggerManager = new TestLoggerManager();14            loggerManager.InitializeLogger(new ConsoleLogger(), new List<string>() { "console" });15            Console.Read();16        }17    }18}19using Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Client;20using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client;21using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging;22using System;23using System.Collections.Generic;24using System.Linq;25using System.Text;26using System.Threading.Tasks;27{28    {29        static void Main(string[] args)30        {31            TestLoggerManager loggerManager = new TestLoggerManager();32            loggerManager.InitializeLogger(new ConsoleLogger(), new List<string>() { "console" });33            Console.Read();34        }35    }36}37using Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Client;38using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client;39using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging;40using System;41using System.Collections.Generic;42using System.Linq;43using System.Text;44using System.Threading.Tasks;45{46    {47        static void Main(string[] args)48        {49            TestLoggerManager loggerManager = new TestLoggerManager();50            loggerManager.InitializeLogger(new ConsoleLogger(), new List<string>() { "console" });51            Console.Read();52        }53    }54}55using Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Client;56using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client;57using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging;58using System;59using System.Collections.Generic;60using System.Linq;61using System.Text;62using System.Threading.Tasks;63{64    {InitializeLogger
Using AI Code Generation
1using Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Client;2using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client;3using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging;4using Microsoft.VisualStudio.TestPlatform.Utilities.Helpers;5using System;6using System.Collections.Generic;7using System.Linq;8using System.Text;9using System.Threading.Tasks;10{11    {12        static void Main(string[] args)13        {14            TestLoggerManager testLoggerManager = new TestLoggerManager();15            Console.ReadKey();16        }17    }18}InitializeLogger
Using AI Code Generation
1var testLoggerManager = new TestLoggerManager();2var testLoggerManager = new TestLoggerManager();3var testLoggerManager = new TestLoggerManager();4var testLoggerManager = new TestLoggerManager();5var testLoggerManager = new TestLoggerManager();6var testLoggerManager = new TestLoggerManager();Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
