Skip to content

Commit f5c8b78

Browse files
authored
Fixes #2627 Move PresenterLogger to core (#2628)
1 parent 8c393ae commit f5c8b78

File tree

2 files changed

+84
-0
lines changed

2 files changed

+84
-0
lines changed
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
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+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using System.Collections.Concurrent;
2+
using Microsoft.Extensions.Logging;
3+
4+
namespace OSPSuite.Infrastructure.Services
5+
{
6+
public class PresenterLoggerProvider : ILoggerProvider
7+
{
8+
private readonly ConcurrentDictionary<string, PresenterLogger> _loggers = new ConcurrentDictionary<string, PresenterLogger>();
9+
10+
public ILogger CreateLogger(string categoryName)
11+
{
12+
return _loggers.GetOrAdd(categoryName, createLoggerImplementation);
13+
}
14+
15+
private PresenterLogger createLoggerImplementation(string name)
16+
{
17+
return new PresenterLogger(name);
18+
}
19+
20+
public void Dispose()
21+
{
22+
}
23+
}
24+
}

0 commit comments

Comments
 (0)