Я бы предложил написать LayoutRendererWrapper . LayoutRendererWrapper позволяет вам «обернуть» LayoutRenderer, чтобы вы могли применить обработку к выводу. В случае шифрования трассировки стека вы можете настроить NLog для добавления StackTrace к выводу, но вы можете обернуть рендерер макета StackTrace, чтобы применить шифрование.
Вы видите примеры LayuoutRendererWrappers в хранилище исходного кода NLog .
На самом деле, общая природа 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}
Я не уверен, как бы вы сконфигурировали его программно, поскольку я обычно не использую программную конфигурацию.