Dal*_*use 5 c# logging dependency-injection .net-core
我\xe2\x80\x99m 构建一个 dotnet 核心应用程序,我需要从日志中编辑社会安全号码。目前,该应用程序正在使用控制台记录器。这有最佳实践吗?本质上,我想为控制台记录器创建一个适配器,用于拦截日志消息,编辑社会安全号码,并将其发送到控制台记录器。就像下面的代码一样。
\n\npublic 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}\nRun Code Online (Sandbox Code Playgroud)\n\n我上面的内容“有效”,但我担心它很脆弱且不完整。任何方向都将受到高度赞赏。
\n| 归档时间: |
|
| 查看次数: |
293 次 |
| 最近记录: |