UseAppFilter for Logs pipeline (#2060)
authorWiktor Kopec <wiktork@microsoft.com>
Wed, 10 Mar 2021 22:05:09 +0000 (14:05 -0800)
committerGitHub <noreply@github.com>
Wed, 10 Mar 2021 22:05:09 +0000 (14:05 -0800)
src/Microsoft.Diagnostics.Monitoring.EventPipe/Configuration/LoggingSourceConfiguration.cs
src/Microsoft.Diagnostics.Monitoring.EventPipe/Logs/EventLogsPipeline.cs
src/Microsoft.Diagnostics.Monitoring.EventPipe/Logs/EventLogsPipelineSettings.cs

index b6bebf8f277766c524ecb5fa5db3612c45d3b325..3b7ed790a47eca332b9b2ce2676e0eed6b48998f 100644 (file)
@@ -2,6 +2,7 @@
 // The .NET Foundation licenses this file to you under the MIT license.
 // See the LICENSE file in the project root for more information.
 
+using System;
 using System.Collections.Generic;
 using System.Diagnostics.Tracing;
 using Microsoft.Diagnostics.NETCore.Client;
@@ -11,17 +12,30 @@ namespace Microsoft.Diagnostics.Monitoring.EventPipe
 {
     public class LoggingSourceConfiguration : MonitoringSourceConfiguration
     {
+        private const string UseAppFilters = "UseAppFilters";
+
         private readonly LogLevel _level;
+        private readonly bool _useAppFilters;
 
-        public LoggingSourceConfiguration(LogLevel level = LogLevel.Debug)
+        /// <summary>
+        /// Creates a new logging source configuration.
+        /// </summary>
+        /// <param name="level">The logging level. Log messages at or above the log level will be included.</param>
+        /// <param name="useAppFilters">Use the UseAppFilters filterspec. This supersedes the log level and generates
+        /// log messages with the same levels per category as specified by the application configuration.</param>
+        public LoggingSourceConfiguration(LogLevel level = LogLevel.Debug, bool useAppFilters = false)
         {
             _level = level;
+            _useAppFilters = useAppFilters;
         }
 
         public override IList<EventPipeProvider> GetProviders()
         {
+            string filterSpec = _useAppFilters ? UseAppFilters : FormattableString.Invariant($"*:{_level:G}");
+
             var providers = new List<EventPipeProvider>()
             {
+
                 // Logging
                 new EventPipeProvider(
                     MicrosoftExtensionsLoggingProviderName,
@@ -29,8 +43,8 @@ namespace Microsoft.Diagnostics.Monitoring.EventPipe
                     (long)(LoggingEventSource.Keywords.JsonMessage | LoggingEventSource.Keywords.FormattedMessage),
                     arguments: new Dictionary<string,string>
                         {
-                            // Filter all loggers to the specified level
-                            { "FilterSpecs", $"*:{_level:G}" }
+
+                            { "FilterSpecs", filterSpec }
                         }
                 )
             };
index 62ddc75f0195bcbe204515a7593d550f921ef27b..401cda0000ebc91394198bd0252224b0bc355072 100644 (file)
@@ -24,7 +24,7 @@ namespace Microsoft.Diagnostics.Monitoring.EventPipe
 
         protected override MonitoringSourceConfiguration CreateConfiguration()
         {
-            return new LoggingSourceConfiguration(Settings.LogLevel);
+            return new LoggingSourceConfiguration(Settings.LogLevel, Settings.UseAppFilters);
         }
 
         protected override Task OnEventSourceAvailable(EventPipeEventSource eventSource, Func<Task> stopSessionAsync, CancellationToken token)
index 58333f7880dc003f2d5d9fdb89b2019aa6bb7a4a..4e510038dcc3c577ac6c68b042c6ee8371471fc9 100644 (file)
@@ -12,5 +12,8 @@ namespace Microsoft.Diagnostics.Monitoring.EventPipe
     internal class EventLogsPipelineSettings : EventSourcePipelineSettings
     {
         public LogLevel LogLevel { get; set; }
+
+        //This setting will set the levels to application default.
+        public bool UseAppFilters { get; set; }
     }
 }