本文最后更新于 2025-11-21 20:31:45
Serilog、NLog 日志加密 采用AES方式加密 Serilog 日志加密 通过继承ITextFormatter,重新定义日志内部逻辑;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 public class EncryptTextFormatter : Serilog.Formatting.ITextFormatter { private static byte [] Key = Encoding.UTF8.GetBytes("xxx" ); private static byte [] IV = Encoding.UTF8.GetBytes("xxx" ); public void Format (LogEvent logEvent, TextWriter output ) { var logMessage = $"{logEvent.Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{logEvent.Level} ] {logEvent.RenderMessage()} {logEvent.Exception} " ; var encryptedMessage = Encrypt(logMessage); output.WriteLine(encryptedMessage); } private string Encrypt (string text ) { using (var aes = Aes.Create()) { aes.Key = Key; aes.IV = IV; using (var encryptor = aes.CreateEncryptor(aes.Key, aes.IV)) using (var ms = new MemoryStream()) { using (var cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write)) using (var sw = new StreamWriter(cs)) { sw.Write(text); } return Convert.ToBase64String(ms.ToArray()); } } } }
注册
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public static void AddLogger (this IServiceCollection serviceCollection ) { serviceCollection.AddSingleton<Serilog.ILogger>(_ => { return new Serilog.LoggerConfiguration() .Enrich.WithThreadId() .MinimumLevel.Verbose() .WriteTo.File( formatter: new EncryptTextFormatter(), path: "./log/log.txt" , rollingInterval: Serilog.RollingInterval.Day ) .CreateLogger(); }); }
NLog 日志加密 通过继承LayoutRenderer,重新定义日志内部逻辑;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 [NLog.LayoutRenderers.LayoutRenderer("message" ) ]public sealed class EncryptedMessage : NLog.LayoutRenderers.LayoutRenderer { private static byte [] Key = System.Text.Encoding.UTF8.GetBytes( "xxx" ); private static byte [] IV = System.Text.Encoding.UTF8.GetBytes("xxx" ); protected override void Append (System.Text.StringBuilder builder, LogEventInfo logEvent ) { builder.Append(logEvent.Message); string logMessage = builder.ToString(); string encryptedMessage = Encrypt(logMessage); builder.Clear(); builder.Append(encryptedMessage); } private string Encrypt (string text ) { using (var aes = System.Security.Cryptography.Aes.Create()) { aes.Key = Key; aes.IV = IV; using (var encryptor = aes.CreateEncryptor(aes.Key, aes.IV)) using (var ms = new System.IO.MemoryStream()) { using ( var cs = new System.Security.Cryptography.CryptoStream( ms, encryptor, System.Security.Cryptography.CryptoStreamMode.Write ) ) using (var sw = new System.IO.StreamWriter(cs)) { sw.Write(text); } return Convert.ToBase64String(ms.ToArray()); } } } }
注册 EncryptedMessage
1 2 3 4 5 6 7 8 9 10 11 12 public static void AddLogger (this IServiceCollection serviceCollection ) { NLog.LogManager.Setup() .SetupExtensions(s => s.RegisterLayoutRenderer("message" , typeof (EncryptedMessage)) ); serviceCollection.AddSingleton<NLog.ILogger>(_ => { return NLog.LogManager.GetCurrentClassLogger(); }); }