我正在使用最新版本的NLog(来自nuget),我以编程方式配置它.
目前它保存在我的数据库中,但我希望它加密我的stacktrace参数.
目前它保存在我的数据库中,但我希望它加密我的stacktrace参数.
解决方法
我建议编写一个
LayoutRendererWrapper. LayoutRendererWrapper允许您“包装”LayoutRenderer,以便您可以将处理应用于输出.在加密堆栈跟踪的情况下,您可以配置NLog以将StackTrace添加到输出,但是您可以包装StackTrace布局渲染器以便您可以应用加密.
您可以在NLog’s source code repository中看到LayuoutRendererWrappers的示例.
实际上,LayoutRendererWrapper的一般性质意味着您可以编写加密包装并将其应用于任何LayoutRenderer.因此,您可以,例如,加密堆栈跟踪和消息,但将其余字段保留为明文.
以下是您可以编写加密LayoutRendererWrapper的示例(未经测试):
namespace NLog.LayoutRenderers.Wrappers { using System.ComponentModel; using System.Globalization; using NLog.Config; [LayoutRenderer("Encrypt")] [AmbientProperty("Encrypt")] [ThreadAgnostic] public sealed class EncryptLayoutRendererWrapper : WrapperLayoutRendererBase { public EncryptLayoutRendererWrapper() { this.Culture = CultureInfo.InvariantCulture; this.Encrypt = true; } [DefaultValue(true)] public bool Encrypt { get; set; } public CultureInfo Culture { get; set; } protected override string Transform(string text) { return this.Encrypt ? Encrypt(text) : text; } protected string Encrypt(string text) { //Encrypt your text here. } } }
我认为它将在NLog.config文件中配置如下:
${longdate} | ${logger} | ${level} | ${encrypt:${stacktrace}} | ${message}
我不确定如何以编程方式配置它,因为我通常不使用编程配置.