Vorrei suggerire a scrivere una LayoutRendererWrapper. A LayoutRendererWrapper consente di "avvolgere" un Layoutenderer in modo da poter applicare l'elaborazione all'output. In caso di crittografia dello stack trace, è possibile configurare NLog per aggiungere StackTrace all'output, ma è possibile racchiudere il renderer di layout StackTrace in modo da poter applicare la crittografia.
Si vedono esempi di LayuoutRendererWrappers in NLog's source code repository.
In realtà, la natura generale di LayoutRendererWrapper significa che è possibile scrivere un wrapper di crittografia e applicarlo a qualsiasi LayoutRenderer. Quindi, ad esempio, è possibile crittografare la traccia dello stack e il messaggio, ma lasciare il resto dei campi come testo in chiaro.
Ecco un esempio (non testata) di come si potrebbe scrivere un LayoutRendererWrapper crittografia:
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.
}
}
}
penso che sarebbe essere configurato in questo modo nel file NLog.config:
${longdate} | ${logger} | ${level} | ${encrypt:${stacktrace}} | ${message}
I Non sono sicuro di come lo si configurerà a livello di codice, in quanto normalmente non utilizzo la configurazione programmatica.
grazie, penso che sia così. –
grazie. Devi aggiungere al tuo principale: 'ConfigurationItemFactory.Default.LayoutRenderers .RegisterDefinition (" Encrypt ", typeof (NLog.LayoutRenderers.Wrappers.EncryptLayoutRendererWrapper));' – daniel