28 lines
1.3 KiB
C#
28 lines
1.3 KiB
C#
using Serilog.Events;
|
|
using ZB.MOM.WW.Configuration;
|
|
|
|
namespace ZB.MOM.WW.ScadaBridge.Host;
|
|
|
|
/// <summary>
|
|
/// Validates <see cref="LoggingOptions"/> at host startup (arch-review 08 round
|
|
/// 2 NF4). <see cref="LoggingOptions.MinimumLevel"/> is parsed into a Serilog
|
|
/// <see cref="LogEventLevel"/> by <c>LoggerConfigurationFactory.ParseLevel</c>,
|
|
/// which silently falls back to <c>Information</c> 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.
|
|
/// </summary>
|
|
public sealed class LoggingOptionsValidator : OptionsValidatorBase<LoggingOptions>
|
|
{
|
|
/// <inheritdoc />
|
|
protected override void Validate(ValidationBuilder builder, LoggingOptions options)
|
|
{
|
|
builder.RequireThat(
|
|
string.IsNullOrWhiteSpace(options.MinimumLevel)
|
|
|| Enum.TryParse<LogEventLevel>(options.MinimumLevel, ignoreCase: true, out _),
|
|
$"ScadaBridge:Logging:{nameof(LoggingOptions.MinimumLevel)} ('{options.MinimumLevel}') " +
|
|
$"is not a recognised Serilog level. Valid: {string.Join(", ", Enum.GetNames<LogEventLevel>())}.");
|
|
}
|
|
}
|