2017-05-18 3 views
0

Wir müssen die Einträge abfangen, die nlog auf Festplatte schreibt, damit URLs/IP-Adressen und ähnliche sicherheitsrelevante Informationen verschleiert oder irgendwie codiert werden können.Abfangen von Protokollmeldungen in nlog

Wenn zum Beispiel jeder URL, die protokolliert wird von http://servername:2212/webservice zu konvertiert werden soll (http): // servername/2212/webservice

Gibt es ein nlog Muster, das einen regulären Ausdruck nehmen würde und konvertieren zu einer anderen Zeichenfolge?

oder ist es möglich, das Schreiben der Protokolldatei abzufangen, um dies zu erreichen?

Jede Hilfe, Vorschlag oder Umleitung wäre wirklich hilfreich.

Wir .NET 4.5, nlog 4.4, C#

Antwort

1

schreiben einen Wrapper layoutrenderer verwenden, können Sie wickeln als alle Layout-Renderer. . z.B. Wenn Sie das Layout ${message}${exception} hatte, wird es

${intercept:inner=${message}${exception}} 

Code sein:

[LayoutRenderer("intercept")] 
public sealed class InterceptLayoutRendererWrapper : WrapperLayoutRendererBuilderBase 
{ 

    /// <summary> 
    /// Option you could set from config or code 
    /// </summary> 
    [DefaultValue(true)] 
    public bool Option1 { get; set; } 


    /// <summary> 
    /// Renders the inner layout contents. 

    /// OR override TransformFormattedMesssage, and change the stringbuilder (less string allocations) 
    /// </summary> 
    /// <param name="logEvent">The log event.</param> 
    /// <returns>Contents of inner layout.</returns> 
    protected override string RenderInner(LogEventInfo logEvent) 
    { 
     var text = this.Inner.Render(logEvent); 
     return interceptSomething(text); 
    } 

} 

und registrieren:

LayoutRenderer.Register<InterceptLayoutRendererWrapper>("intercept"); 
+0

Dank .. Lassen Sie uns versuchen und kommentieren zurück so schnell wie möglich – kgpai

+0

Alternative könnte man Machen Sie den Render-Wrapper, der die Transform-Methode verwendet, um den Log-Text zu "reparieren". Der Render-Wrapper würde eine Liste von Regex-Ausdrücken für übereinstimmende Textmuster im Log-Text enthalten und bei Übereinstimmung dann durch eine Standard-Zeichenfolge ersetzen. Ähnlich wie https://github.com/NLog/NLog/blob/master/src/NLog/LayoutRenderers/Wrappers/Rot13LayoutRendererWrapper.cs https://github.com/NLog/NLog/wiki/Rot13-Layout-Renderer –

+0

Und Ein benutzerdefinierter Zielwrapper ist ebenfalls eine Option - er umschließt das vollständige Ziel. Aber ein bisschen weniger flexibel. – Julian