Example #1
0
        public SerilogOptions(IConfiguration configuration)
        {
            var section = configuration.GetSection(ConfigPath);

            section.Bind(this);
            if (MinimumLevel == null)
            {
                MinimumLevel = new MinimumLevel()
                {
                    Default  = LogEventLevel.Verbose, // Set root to verbose to have sub loggers work at all levels
                    Override = new Dictionary <string, LogEventLevel>()
                };
            }

            if (SubloggerConfigKeyExclusions == null)
            {
                SubloggerConfigKeyExclusions = new List <string> {
                    "WriteTo", "MinimumLevel"
                };
            }
        }
Example #2
0
        // Capture Serilog configuration provided programmatically using reflection
        public void SetSerilogOptions(Serilog.LoggerConfiguration loggerConfiguration)
        {
            var minLevelProperty = loggerConfiguration.GetType().GetField("_minimumLevel", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
            var minimumLevel     = (LogEventLevel)minLevelProperty.GetValue(loggerConfiguration);

            var overridesProperty = loggerConfiguration.GetType().GetField("_overrides", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
            var overrideSwitches  = (Dictionary <string, Serilog.Core.LoggingLevelSwitch>)overridesProperty.GetValue(loggerConfiguration);

            Dictionary <string, LogEventLevel> overrideLevels = new ();

            foreach (var overrideSwitch in overrideSwitches)
            {
                overrideLevels.Add(overrideSwitch.Key, overrideSwitch.Value.MinimumLevel);
            }

            MinimumLevel = new MinimumLevel()
            {
                Default  = minimumLevel,
                Override = overrideLevels ?? new Dictionary <string, LogEventLevel>()
            };

            _serilogConfiguration = loggerConfiguration.ClearLevels(MinimumLevel);
        }
Example #3
0
        public void SetSerilogOptions(IConfiguration configuration)
        {
            var section = configuration.GetSection(ConfigPath);

            section.Bind(this);
            if (MinimumLevel == null || MinimumLevel.Default == (LogEventLevel)(-1))
            {
                var defaultLevel = LogEventLevel.Information;

                var strMinLevel = section.GetValue <string>("MinimumLevel");
                if (!string.IsNullOrEmpty(strMinLevel))
                {
                    Enum.TryParse(strMinLevel, out defaultLevel);
                }

                MinimumLevel = new MinimumLevel()
                {
                    Default = defaultLevel,
                };
            }

            MinimumLevel.Override ??= new Dictionary <string, LogEventLevel>();
            _serilogConfiguration = new LoggerConfiguration().ReadFrom.Configuration(configuration).ClearLevels(MinimumLevel);
        }
        /// <summary>
        /// Clear all the levels from serilog configuration. This extension is used to clear the levels in serilog, after capturing them into steeltoe config
        /// and using steeltoe config to control the verbosity.
        /// </summary>
        /// <param name="loggerConfiguration">The <see cref="LoggerConfiguration"/></param>
        /// <param name="minimumLevel">The Steeltoe <see cref="MinimumLevel"/></param>
        /// <returns>The <see cref="LoggerConfiguration"/> that is cleared</returns>
        internal static LoggerConfiguration ClearLevels(this LoggerConfiguration loggerConfiguration, MinimumLevel minimumLevel)
        {
            foreach (var overrideLevel in minimumLevel.Override)
            {
                loggerConfiguration.MinimumLevel.Override(overrideLevel.Key, Serilog.Events.LogEventLevel.Verbose);
            }

            return(loggerConfiguration.MinimumLevel.Verbose());
        }