Skip to content
This repository was archived by the owner on Dec 13, 2018. It is now read-only.

Commit c390b85

Browse files
authored
Apply event source FilterSpec to filter options (#883)
1 parent 2ff997f commit c390b85

File tree

11 files changed

+409
-263
lines changed

11 files changed

+409
-263
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// Copyright (c) .NET Foundation. All rights reserved.
2+
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
3+
4+
using Microsoft.Extensions.Logging.EventSource;
5+
using Microsoft.Extensions.Options;
6+
7+
namespace Microsoft.Extensions.Logging
8+
{
9+
internal class EventLogFiltersConfigureOptions : IConfigureOptions<LoggerFilterOptions>
10+
{
11+
private readonly LoggingEventSource _eventSource;
12+
13+
public EventLogFiltersConfigureOptions(LoggingEventSource eventSource)
14+
{
15+
_eventSource = eventSource;
16+
}
17+
18+
public void Configure(LoggerFilterOptions options)
19+
{
20+
foreach (var rule in _eventSource.GetFilterRules())
21+
{
22+
options.Rules.Add(rule);
23+
}
24+
}
25+
}
26+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// Copyright (c) .NET Foundation. All rights reserved.
2+
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
3+
4+
using Microsoft.Extensions.Logging.EventSource;
5+
using Microsoft.Extensions.Options;
6+
using Microsoft.Extensions.Primitives;
7+
8+
namespace Microsoft.Extensions.Logging
9+
{
10+
internal class EventLogFiltersConfigureOptionsChangeSource: IOptionsChangeTokenSource<LoggerFilterOptions>
11+
{
12+
private readonly LoggingEventSource _eventSource;
13+
14+
public EventLogFiltersConfigureOptionsChangeSource(LoggingEventSource eventSource)
15+
{
16+
_eventSource = eventSource;
17+
}
18+
19+
public IChangeToken GetChangeToken() => _eventSource.GetFilterChangeToken();
20+
21+
public string Name { get; }
22+
}
23+
}

src/Microsoft.Extensions.Logging.EventSource/EventSourceLogger.cs

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public EventSourceLogger(string categoryName, int factoryID, LoggingEventSource
2828
CategoryName = categoryName;
2929

3030
// Default is to turn off logging
31-
Level = LoggingEventSource.LoggingDisabled;
31+
Level = LogLevel.None;
3232

3333
_factoryID = factoryID;
3434
_eventSource = eventSource;
@@ -37,22 +37,7 @@ public EventSourceLogger(string categoryName, int factoryID, LoggingEventSource
3737

3838
public string CategoryName { get; }
3939

40-
private LogLevel _level;
41-
42-
public LogLevel Level
43-
{
44-
get
45-
{
46-
// need to check if the filter spec and internal event source level has changed
47-
// and update the loggers level if it has
48-
_eventSource.ApplyFilterSpec();
49-
return _level;
50-
}
51-
set
52-
{
53-
_level = value;
54-
}
55-
}
40+
public LogLevel Level { get; set; }
5641

5742
// Loggers created by a single provider form a linked list
5843
public EventSourceLogger Next { get; }

src/Microsoft.Extensions.Logging.EventSource/EventSourceLoggerFactoryExtensions.cs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using Microsoft.Extensions.DependencyInjection;
66
using Microsoft.Extensions.DependencyInjection.Extensions;
77
using Microsoft.Extensions.Logging.EventSource;
8+
using Microsoft.Extensions.Options;
89

910
namespace Microsoft.Extensions.Logging
1011
{
@@ -24,9 +25,10 @@ public static ILoggingBuilder AddEventSourceLogger(this ILoggingBuilder builder)
2425
throw new ArgumentNullException(nameof(builder));
2526
}
2627

27-
var loggerProvider = LoggingEventSource.Instance.CreateLoggerProvider();
28-
builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton<ILoggerProvider>(loggerProvider));
29-
28+
builder.Services.TryAddSingleton(LoggingEventSource.Instance);
29+
builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton<ILoggerProvider, EventSourceLoggerProvider>());
30+
builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton<IConfigureOptions<LoggerFilterOptions>, EventLogFiltersConfigureOptions>());
31+
builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton<IOptionsChangeTokenSource<LoggerFilterOptions>, EventLogFiltersConfigureOptionsChangeSource>());
3032
return builder;
3133
}
3234

@@ -41,8 +43,7 @@ public static ILoggerFactory AddEventSourceLogger(this ILoggerFactory factory)
4143
throw new ArgumentNullException(nameof(factory));
4244
}
4345

44-
var loggerProvider = LoggingEventSource.Instance.CreateLoggerProvider();
45-
factory.AddProvider(loggerProvider);
46+
factory.AddProvider(new EventSourceLoggerProvider(LoggingEventSource.Instance, handleFilters: true));
4647

4748
return factory;
4849
}

0 commit comments

Comments
 (0)