Skip to content

Commit 0da7b96

Browse files
committed
Adds ILoggingBuilder extension for LanguageServer logging.
1 parent 3dd94c7 commit 0da7b96

9 files changed

+55
-40
lines changed

sample/SampleServer/Program.cs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,11 @@ static void Main(string[] args)
1919

2020
static async Task MainAsync(string[] args)
2121
{
22-
// while (!System.Diagnostics.Debugger.IsAttached)
23-
// {
22+
Debugger.Launch();
23+
//while (!System.Diagnostics.Debugger.IsAttached)
24+
//{
2425
// await Task.Delay(100);
25-
// }
26+
//}
2627

2728
Log.Logger = new LoggerConfiguration()
2829
.Enrich.FromLogContext()
@@ -35,8 +36,10 @@ static async Task MainAsync(string[] args)
3536
options
3637
.WithInput(Console.OpenStandardInput())
3738
.WithOutput(Console.OpenStandardOutput())
38-
.ConfigureLogging(x => x.AddSerilog())
39-
.AddDefaultLoggingProvider()
39+
.ConfigureLogging(x => x
40+
.AddSerilog()
41+
.AddLanguageServer(LogLevel.Critical)
42+
.SetMinimumLevel(LogLevel.Trace))
4043
.WithHandler<TextDocumentHandler>()
4144
.WithHandler<DidChangeWatchedFilesHandler>()
4245
.WithHandler<FoldingRangeHandler>()

sample/SampleServer/TextDocumentHandler.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ public TextDocumentHandler(ILogger<TextDocumentHandler> logger, Foo foo)
3636

3737
public Task<Unit> Handle(DidChangeTextDocumentParams notification, CancellationToken token)
3838
{
39+
_logger.LogCritical("Critical");
40+
_logger.LogDebug("Debug");
41+
_logger.LogTrace("Trace");
3942
_logger.LogInformation("Hello world!");
4043
return Unit.Task;
4144
}

src/Server/LanguageServer.cs

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
using OmniSharp.Extensions.LanguageServer.Server.Pipelines;
2727
using ISerializer = OmniSharp.Extensions.LanguageServer.Protocol.Serialization.ISerializer;
2828
using System.Reactive.Disposables;
29+
using Microsoft.Extensions.Options;
2930

3031
namespace OmniSharp.Extensions.LanguageServer.Server
3132
{
@@ -106,8 +107,7 @@ public static ILanguageServer PreInit(LanguageServerOptions options)
106107
options.TextDocumentIdentifierTypes,
107108
options.InitializeDelegates,
108109
options.InitializedDelegates,
109-
options.LoggingBuilderAction,
110-
options.AddDefaultLoggingProvider
110+
options.LoggingBuilderAction
111111
);
112112
}
113113

@@ -127,20 +127,11 @@ internal LanguageServer(
127127
IEnumerable<Type> textDocumentIdentifierTypes,
128128
IEnumerable<InitializeDelegate> initializeDelegates,
129129
IEnumerable<InitializedDelegate> initializedDelegates,
130-
Action<ILoggingBuilder> loggingBuilderAction,
131-
bool addDefaultLoggingProvider)
130+
Action<ILoggingBuilder> loggingBuilderAction)
132131
{
133132
var outputHandler = new OutputHandler(output, serializer);
134133

135-
services.AddLogging(builder =>
136-
{
137-
loggingBuilderAction(builder);
138-
139-
if (addDefaultLoggingProvider)
140-
{
141-
builder.AddProvider(new LanguageServerLoggerProvider(this));
142-
}
143-
});
134+
services.AddLogging(builder => loggingBuilderAction(builder));
144135

145136
_reciever = reciever;
146137
_serializer = serializer;
@@ -248,11 +239,6 @@ internal LanguageServer(
248239
public InitializeParams ClientSettings { get; private set; }
249240
public InitializeResult ServerSettings { get; private set; }
250241

251-
/// <summary>
252-
/// The minimum level for the server's default logger.
253-
/// </summary>
254-
public LogLevel MinimumLogLevel { get; set; }
255-
256242
public IServiceProvider Services => _serviceProvider;
257243

258244
public IDisposable AddHandler(string method, IJsonRpcHandler handler)
@@ -357,9 +343,14 @@ async Task<InitializeResult> IRequestHandler<InitializeParams, InitializeResult>
357343
{
358344
ClientSettings = request;
359345

360-
if (request.Trace == InitializeTrace.Verbose && MinimumLogLevel >= LogLevel.Information)
346+
if (request.Trace == InitializeTrace.Verbose)
361347
{
362-
MinimumLogLevel = LogLevel.Trace;
348+
var loggerSettings = _serviceProvider.GetService<LanguageServerLoggerSettings>();
349+
350+
if (loggerSettings?.MinimumLogLevel >= LogLevel.Information)
351+
{
352+
loggerSettings.MinimumLogLevel = LogLevel.Trace;
353+
}
363354
}
364355

365356
_clientVersion = request.Capabilities?.GetClientVersion() ?? ClientVersion.Lsp2;

src/Server/LanguageServerOptions.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ public LanguageServerOptions()
3333
internal List<Type> HandlerTypes { get; set; } = new List<Type>();
3434
internal List<Type> TextDocumentIdentifierTypes { get; set; } = new List<Type>();
3535
internal List<Assembly> HandlerAssemblies { get; set; } = new List<Assembly>();
36-
internal bool AddDefaultLoggingProvider { get; set; }
3736
internal Action<ILoggingBuilder> LoggingBuilderAction { get; set; } = new Action<ILoggingBuilder>(_ => { });
3837

3938
internal readonly List<InitializeDelegate> InitializeDelegates = new List<InitializeDelegate>();

src/Server/LanguageServerOptionsExtensions.cs

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -78,13 +78,6 @@ public static LanguageServerOptions WithServices(this LanguageServerOptions opti
7878
return options;
7979
}
8080

81-
public static LanguageServerOptions AddDefaultLoggingProvider(this LanguageServerOptions options)
82-
{
83-
options.AddDefaultLoggingProvider = true;
84-
return options;
85-
}
86-
87-
8881
public static LanguageServerOptions OnInitialize(this LanguageServerOptions options, InitializeDelegate @delegate)
8982
{
9083
options.InitializeDelegates.Add(@delegate);

src/Server/LanguageServerLogger.cs renamed to src/Server/Logging/LanguageServerLogger.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,16 @@
11
using System;
22
using Microsoft.Extensions.Logging;
3-
using OmniSharp.Extensions.JsonRpc;
4-
using OmniSharp.Extensions.LanguageServer.Protocol;
53
using OmniSharp.Extensions.LanguageServer.Protocol.Models;
64
using OmniSharp.Extensions.LanguageServer.Protocol.Server;
75

86
namespace OmniSharp.Extensions.LanguageServer.Server
97
{
108
class LanguageServerLogger : ILogger
119
{
12-
private readonly LanguageServer _responseRouter;
10+
private readonly ILanguageServer _responseRouter;
1311
private readonly Func<LogLevel> _logLevelGetter;
1412

15-
public LanguageServerLogger(LanguageServer responseRouter, Func<LogLevel> logLevelGetter)
13+
public LanguageServerLogger(ILanguageServer responseRouter, Func<LogLevel> logLevelGetter)
1614
{
1715
_logLevelGetter = logLevelGetter;
1816
_responseRouter = responseRouter;
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using Microsoft.Extensions.DependencyInjection;
2+
using Microsoft.Extensions.Logging;
3+
using Microsoft.Extensions.Options;
4+
5+
namespace OmniSharp.Extensions.LanguageServer.Server
6+
{
7+
public static class LanguageServerLoggerExtensions
8+
{
9+
public static ILoggingBuilder AddLanguageServer(this ILoggingBuilder builder, LogLevel minLevel = LogLevel.Information)
10+
{
11+
builder.Services.AddSingleton<LanguageServerLoggerSettings>(_ => new LanguageServerLoggerSettings { MinimumLogLevel = minLevel });
12+
builder.Services.AddSingleton<ILoggerProvider, LanguageServerLoggerProvider>();
13+
14+
return builder;
15+
}
16+
}
17+
}

src/Server/LanguageServerLoggerProvider.cs renamed to src/Server/Logging/LanguageServerLoggerProvider.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,18 @@ namespace OmniSharp.Extensions.LanguageServer.Server
55
{
66
class LanguageServerLoggerProvider : ILoggerProvider
77
{
8-
private readonly LanguageServer _languageServer;
8+
private readonly ILanguageServer _languageServer;
9+
private readonly LanguageServerLoggerSettings _settings;
910

10-
public LanguageServerLoggerProvider(LanguageServer languageServer)
11+
public LanguageServerLoggerProvider(ILanguageServer languageServer, LanguageServerLoggerSettings settings)
1112
{
1213
_languageServer = languageServer;
14+
_settings = settings;
1315
}
1416

1517
public ILogger CreateLogger(string categoryName)
1618
{
17-
return new LanguageServerLogger(_languageServer, () => _languageServer.MinimumLogLevel);
19+
return new LanguageServerLogger(_languageServer, () => _settings.MinimumLogLevel);
1820
}
1921

2022
public void Dispose()
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
using Microsoft.Extensions.Logging;
2+
3+
namespace OmniSharp.Extensions.LanguageServer.Server
4+
{
5+
internal class LanguageServerLoggerSettings
6+
{
7+
public LogLevel MinimumLogLevel { get; set; }
8+
}
9+
}

0 commit comments

Comments
 (0)