1+ using Microsoft . Extensions . DependencyInjection ;
2+ using Microsoft . Extensions . Logging ;
3+ using Microsoft . Extensions . Logging . Abstractions ;
4+ using OSPSuite . Core . Events ;
5+ using OSPSuite . Core . Services ;
6+ using OSPSuite . Utility . Container ;
7+ using OSPSuite . Utility . Events ;
8+ using System ;
9+
10+ namespace OSPSuite . Infrastructure . Services
11+ {
12+ public class PresenterLogger : ILogger
13+ {
14+ private readonly IEventPublisher _eventPublisher ;
15+ public string Name { get ; }
16+
17+ public PresenterLogger ( string name )
18+ {
19+ _eventPublisher = IoC . Resolve < IEventPublisher > ( ) ;
20+ Name = name ;
21+ }
22+
23+ public void Log < TState > ( LogLevel logLevel , EventId eventId , TState state , Exception exception , Func < TState , Exception , string > formatter )
24+ {
25+ if ( formatter == null )
26+ throw new ArgumentNullException ( nameof ( formatter ) ) ;
27+
28+ string message = formatter ( state , exception ) ;
29+ if ( string . IsNullOrEmpty ( message ) && exception == null )
30+ return ;
31+
32+ writeMessage ( logLevel , Name , eventId . Id , message , exception ) ;
33+ }
34+
35+ private void writeMessage ( LogLevel logLevel , string name , int eventIdId , string message , Exception exception )
36+ {
37+ var logEntry = new LogEntry ( logLevel , message ) ;
38+ _eventPublisher . PublishEvent ( new LogEntryEvent ( logEntry ) ) ;
39+ }
40+
41+ public bool IsEnabled ( LogLevel logLevel )
42+ {
43+ return true ;
44+ }
45+
46+ public IDisposable BeginScope < TState > ( TState state )
47+ {
48+ return NullLogger . Instance . BeginScope ( state ) ;
49+ }
50+ }
51+
52+ public static class PresenterLoggingBuilderExtensions
53+ {
54+ public static ILoggingBuilder AddPresenter ( this ILoggingBuilder builder )
55+ {
56+ builder . Services . AddSingleton < ILoggerProvider , PresenterLoggerProvider > ( serviceProvider => new PresenterLoggerProvider ( ) ) ;
57+ return builder ;
58+ }
59+ }
60+ }
0 commit comments