@@ -89,12 +89,11 @@ public static async Task<ILanguageServer> From(LanguageServerOptions options, Ca
8989 /// <returns></returns>
9090 public static ILanguageServer PreInit ( LanguageServerOptions options )
9191 {
92- var server = new LanguageServer (
92+ return new LanguageServer (
9393 options . Input ,
9494 options . Output ,
9595 options . Reciever ,
9696 options . RequestProcessIdentifier ,
97- options . LoggerFactory ,
9897 options . Serializer ,
9998 options . Services ,
10099 options . HandlerTypes . Select ( x => x . Assembly )
@@ -106,21 +105,17 @@ public static ILanguageServer PreInit(LanguageServerOptions options)
106105 options . TextDocumentIdentifiers ,
107106 options . TextDocumentIdentifierTypes ,
108107 options . InitializeDelegates ,
109- options . InitializedDelegates
108+ options . InitializedDelegates ,
109+ options . LoggingBuilderAction ,
110+ options . AddDefaultLoggingProvider
110111 ) ;
111-
112- if ( options . AddDefaultLoggingProvider )
113- options . LoggerFactory . AddProvider ( new LanguageServerLoggerProvider ( server ) ) ;
114-
115- return server ;
116112 }
117113
118114 internal LanguageServer (
119115 Stream input ,
120116 Stream output ,
121117 ILspReciever reciever ,
122118 IRequestProcessIdentifier requestProcessIdentifier ,
123- ILoggerFactory loggerFactory ,
124119 ISerializer serializer ,
125120 IServiceCollection services ,
126121 IEnumerable < Assembly > assemblies ,
@@ -131,11 +126,22 @@ internal LanguageServer(
131126 IEnumerable < ITextDocumentIdentifier > textDocumentIdentifiers ,
132127 IEnumerable < Type > textDocumentIdentifierTypes ,
133128 IEnumerable < InitializeDelegate > initializeDelegates ,
134- IEnumerable < InitializedDelegate > initializedDelegates )
129+ IEnumerable < InitializedDelegate > initializedDelegates ,
130+ Action < ILoggingBuilder > loggingBuilderAction ,
131+ bool addDefaultLoggingProvider )
135132 {
136133 var outputHandler = new OutputHandler ( output , serializer ) ;
137134
138- services . AddLogging ( ) ;
135+ services . AddLogging ( builder =>
136+ {
137+ loggingBuilderAction ( builder ) ;
138+
139+ if ( addDefaultLoggingProvider )
140+ {
141+ builder . AddProvider ( new LanguageServerLoggerProvider ( this ) ) ;
142+ }
143+ } ) ;
144+
139145 _reciever = reciever ;
140146 _serializer = serializer ;
141147 _supportedCapabilities = new SupportedCapabilities ( ) ;
@@ -153,7 +159,7 @@ internal LanguageServer(
153159 services . AddSingleton ( requestProcessIdentifier ) ;
154160 services . AddSingleton < OmniSharp . Extensions . JsonRpc . IReciever > ( reciever ) ;
155161 services . AddSingleton < ILspReciever > ( reciever ) ;
156- services . AddSingleton ( loggerFactory ) ;
162+
157163 foreach ( var item in handlers )
158164 {
159165 services . AddSingleton ( item ) ;
@@ -209,6 +215,12 @@ internal LanguageServer(
209215
210216 _exitHandler = new ServerExitHandler ( _shutdownHandler ) ;
211217
218+ // We need to at least create Window here in case any handler does loggin in their constructor
219+ Document = new LanguageServerDocument ( _responseRouter ) ;
220+ Client = new LanguageServerClient ( _responseRouter ) ;
221+ Window = new LanguageServerWindow ( _responseRouter ) ;
222+ Workspace = new LanguageServerWorkspace ( _responseRouter ) ;
223+
212224 _disposable . Add (
213225 AddHandlers ( this , _shutdownHandler , _exitHandler , new CancelRequestHandler < ILspHandlerDescriptor > ( _requestRouter ) )
214226 ) ;
@@ -226,12 +238,6 @@ internal LanguageServer(
226238 {
227239 _disposable . Add ( _collection . Add ( name , handlerFunc ( _serviceProvider ) ) ) ;
228240 }
229-
230-
231- Document = new LanguageServerDocument ( _responseRouter ) ;
232- Client = new LanguageServerClient ( _responseRouter ) ;
233- Window = new LanguageServerWindow ( _responseRouter ) ;
234- Workspace = new LanguageServerWorkspace ( _responseRouter ) ;
235241 }
236242
237243 public ILanguageServerDocument Document { get ; }
0 commit comments