using Serilog.Events; using ZB.MOM.WW.Configuration; namespace ZB.MOM.WW.ScadaBridge.Host; /// /// Validates at host startup (arch-review 08 round /// 2 NF4). is parsed into a Serilog /// by LoggerConfigurationFactory.ParseLevel, /// which silently falls back to Information for an unrecognised value. /// This validator surfaces that misconfiguration at boot instead: a present, /// non-blank value must name a real level (Verbose/Debug/Information/Warning/ /// Error/Fatal, case-insensitive). A null/blank value is treated as "unset" /// (defaults to Information), mirroring the parser. /// public sealed class LoggingOptionsValidator : OptionsValidatorBase { /// protected override void Validate(ValidationBuilder builder, LoggingOptions options) { builder.RequireThat( string.IsNullOrWhiteSpace(options.MinimumLevel) || Enum.TryParse(options.MinimumLevel, ignoreCase: true, out _), $"ScadaBridge:Logging:{nameof(LoggingOptions.MinimumLevel)} ('{options.MinimumLevel}') " + $"is not a recognised Serilog level. Valid: {string.Join(", ", Enum.GetNames())}."); } }