-
Notifications
You must be signed in to change notification settings - Fork 105
/
Copy pathLanguageServerLogger.cs
64 lines (58 loc) · 1.98 KB
/
LanguageServerLogger.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
using System;
using OmniSharp.Extensions.LanguageServer.Models;
using Microsoft.Extensions.Logging;
using OmniSharp.Extensions.LanguageServer.Protocol;
namespace OmniSharp.Extensions.LanguageServer
{
class LanguageServerLogger : ILogger
{
private LanguageServer _languageServer;
public LanguageServerLogger(LanguageServer languageServer)
{
_languageServer = languageServer;
}
public IDisposable BeginScope<TState>(TState state)
{
// TODO
return new ImmutableDisposable();
}
public bool IsEnabled(LogLevel logLevel)
{
// TODO: setup as configuration somehwhere (from trace perhaps?)
return true;
}
public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
{
if (TryGetMessageType(logLevel, out var messageType))
{
_languageServer.Log(new LogMessageParams()
{
Type = messageType,
Message = formatter(state, exception)
});
}
}
private bool TryGetMessageType(LogLevel logLevel, out MessageType messageType)
{
switch (logLevel)
{
case LogLevel.Critical:
case LogLevel.Error:
messageType = MessageType.Error;
return true;
case LogLevel.Warning:
messageType = MessageType.Warning;
return true;
case LogLevel.Information:
messageType = MessageType.Info;
return true;
case LogLevel.Debug:
case LogLevel.Trace:
messageType = MessageType.Info;
return true;
}
messageType = MessageType.Log;
return false;
}
}
}