从 dotnet core 中的日志中编辑 SSN

Dal*_*use 5 c# logging dependency-injection .net-core

我\xe2\x80\x99m 构建一个 dotnet 核心应用程序,我需要从日志中编辑社会安全号码。目前,该应用程序正在使用控制台记录器。这有最佳实践吗?本质上,我想为控制台记录器创建一个适配器,用于拦截日志消息,编辑社会安全号码,并将其发送到控制台记录器。就像下面的代码一样。

\n\n
public class LogRedactor : ILogger\n{\n    private static readonly Regex SsnRegex = new Regex("<SSN>(.*)</SSN>", RegexOptions.Compiled);\n    private readonly ILogger _logger;\n\n    public LogRedactor(ILogger logger)\n    {\n        _logger = logger;\n    }\n\n    public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception,\n        Func<TState, Exception, string> formatter)\n    {\n        if (state is FormattedLogValues)\n            _logger.Log(logLevel, eventId, state, exception,\n                (o, e) => SsnRegex.Replace(o.ToString(), "<SSN>REDACTED</SSN>"));\n        else\n            _logger.Log(logLevel, eventId, state, exception, formatter);\n    }\n\n    public bool IsEnabled(LogLevel logLevel)\n    {\n        return _logger.IsEnabled(logLevel);\n    }\n\n    public IDisposable BeginScope<TState>(TState state)\n    {\n        return _logger.BeginScope(state);\n    }\n}\n\npublic class RedactedConsoleLoggingProvider : ILoggerProvider\n{\n    private readonly ConsoleLoggerProvider _consoleLogger;\n\n    public RedactedConsoleLoggingProvider(ConsoleLoggerProvider consoleLogger)\n    {\n        _consoleLogger = consoleLogger;\n    }\n\n    public void Dispose()\n    {\n        _consoleLogger.Dispose();\n    }\n\n    public ILogger CreateLogger(string categoryName)\n    {\n        var logger = _consoleLogger.CreateLogger(categoryName);\n        return new LogRedactor(logger);\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我上面的内容“有效”,但我担心它很脆弱且不完整。任何方向都将受到高度赞赏。

\n