File: LanguageClient\Logging\RazorLogHubLogger.cs
Web Access
Project: src\src\Razor\src\Razor\src\Microsoft.VisualStudio.LanguageServices.Razor\Microsoft.VisualStudio.LanguageServices.Razor.csproj (Microsoft.VisualStudio.LanguageServices.Razor)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System;
using System.Diagnostics;
using Microsoft.CodeAnalysis.Razor.Logging;
using Microsoft.VisualStudio.Razor.Logging;
 
namespace Microsoft.VisualStudio.Razor.LanguageClient.Logging;
 
internal sealed class RazorLogHubLogger(string categoryName, RazorLogHubTraceProvider traceProvider) : ILogger
{
    private readonly string _categoryName = categoryName;
    private readonly RazorLogHubTraceProvider _traceProvider = traceProvider;
 
    public bool IsEnabled(LogLevel logLevel)
    {
        return true;
    }
 
    public void Log(LogLevel logLevel, string message, Exception? exception)
    {
        if (!_traceProvider.TryGetTraceSource(out var traceSource))
        {
            // We can't log if there is no trace source to log to
            return;
        }
 
        switch (logLevel)
        {
            case LogLevel.Information:
            case LogLevel.Trace:
            case LogLevel.Debug:
            case LogLevel.None:
                traceSource.TraceEvent(TraceEventType.Information, id: 0, "[{0}] {1}", _categoryName, message);
                break;
            case LogLevel.Warning:
                traceSource.TraceEvent(TraceEventType.Warning, id: 0, "[{0}] {1}", _categoryName, message);
                break;
            case LogLevel.Error:
            case LogLevel.Critical:
                traceSource.TraceEvent(TraceEventType.Error, id: 0, "[{0}] {1} {2}", _categoryName, message, exception!);
                break;
        }
    }
}