阅读量:0
ILoggerAdapter.cs
using System; using System.Collections.Generic; using System.Text; public interface ILoggerAdapter<T> { // // Summary: // Formats and writes an informational log message. // // Parameters: // message: // Format string of the log message in message template format. Example: // "User {User} logged in from {Address}" // // args: // An object array that contains zero or more objects to format. void LogInformation(string message, params object[] args); void LogWarning(string message, params object[] args); void LogError(string message, params object[] args); void LogDebug(string message, params object[] args); void LogTrace(string message, params object[] args); }
LoggerAdapter.cs
using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; internal class LoggerAdapter<T> : ILoggerAdapter<T> { private readonly ILogger<T> logger; public LoggerAdapter(ILogger<T> logger) { this.logger = logger; } public void LogDebug(string message, params object[] args) { try { if (logger.IsEnabled(LogLevel.Debug)) { string[] newArgs = GetNewArgs(args); logger.LogDebug(DesensitizationMessage(message), newArgs); } } catch (Exception ex) { logger.LogDebug(message, args); logger.LogError("LogDebug Exception:" + ex.ToString()); } } public void LogError(string message, params object[] args) { logger.LogError(message, args); } public void LogInformation(string message, params object[] args) { try { logger.LogInformation(DesensitizationMessage(message), GetNewArgs(args)); } catch (Exception ex) { logger.LogInformation(message, args); logger.LogError("LogInformation Exception:" + ex.ToString()); } } public void LogTrace(string message, params object[] args) { try { if (logger.IsEnabled(LogLevel.Trace)) { logger.LogTrace(DesensitizationMessage(message), GetNewArgs(args)); } } catch (Exception ex) { logger.LogTrace(message, args); logger.LogError("LogTrace Exception:" + ex.ToString()); } } public void LogWarning(string message, params object[] args) { logger.LogWarning(message, args); } private string[] GetNewArgs(object[] args) { string[] newArgs = null; if (args != null) { newArgs = new string[args.Length]; for (int i = 0; i < args.Length; i++) { newArgs[i] = DesensitizationMessage(args[i].ToString()); } } return newArgs; } private string DesensitizationMessage(string message) { string newMessage = message; Dictionary<string, string> replacementDic = new Dictionary<string, string>(); List<string> regExpresses = new List<string>(); regExpresses.Add("\"[aA]pplicant[nN]ame\": {0,10}\"?(.[^,\"]{1,30})\"?,"); regExpresses.Add("\"[iI]dentify[nN]umber\": {0,10}\"?(.[^,\"]{1,30})\"?,"); regExpresses.Add("\"[mM]obile[pP]hone\": {0,10}\"?(.[^,\"]{1,30})\"?,"); foreach (string regExp in regExpresses) { var Matches = Regex.Matches(message, regExp); if (Matches.Count > 0) { foreach (Match Match in Matches) { if (Match.Success && !replacementDic.ContainsKey(Match.Groups[0].Value)) { replacementDic.Add(Match.Groups[0].Value, DesensiKeyword(Match.Groups[1].Value, Match.Groups[0].Value)); } } } } if (replacementDic.Count > 0) { foreach (KeyValuePair<string, string> kv in replacementDic) { newMessage = newMessage.Replace(kv.Key, kv.Value); } } return newMessage; } private string DesensiKeyword(string keyword, string message) { string star = "*****"; int keyLen = keyword.Length; string desKeyword = string.Empty; if (keyLen <= 1) { return message; } if (keyLen == 2) { desKeyword = keyword.Substring(0, 1) + star; } else { desKeyword = keyword.Substring(0, 1) + star + keyword.Substring(keyLen - 1); } return message.Replace(keyword, desKeyword); } }
LoggerAdapterExtensions.cs
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using System; using System.Collections.Generic; using System.Text; public static class LoggerAdapterExtensions { public static void AddLoggerAdapter(this IServiceCollection services) { services.TryAdd(ServiceDescriptor.Singleton(typeof(ILoggerAdapter<>), typeof(LoggerAdapter<>))); } }
Startup.cs
services.AddLoggerAdapter();