2011-10-25 14 views
6

में लॉग स्टैकट्रैक को कैसे एन्क्रिप्ट कर सकता हूं मैं एनएलओजी (न्यूजेट से) का नवीनतम संस्करण उपयोग कर रहा हूं और मैं इसे प्रोग्रामेटिक रूप से कॉन्फ़िगर करता हूं। वर्तमान में यह मेरे डेटाबेस में सहेजता है लेकिन मैं इसे अपने stacktrace पैरामीटर को एन्क्रिप्ट करना चाहता हूं।एनएलओजी - मैं डेटाबेस

क्या कोई तरीका है कि एनएलओजी स्वचालित रूप से ऐसा करता है? यह देखते हुए कि मेरे पास स्टैकट्रैक एन्क्रिप्ट करने के लिए एक सरल कार्य है, इसे लागू करने का एक आसान तरीका है?

उत्तर

7

मैं एक लेखन सुझाव है LayoutRendererWrapper। एक लेआउट रेन्डररवापर आपको लेआउट रेन्डरर को "लपेटने" की अनुमति देता है ताकि आप आउटपुट पर प्रसंस्करण लागू कर सकें। स्टैक ट्रेस एन्क्रिप्ट करने के मामले में, आप आउटपुट में स्टैकट्रेस जोड़ने के लिए एनएलओजी को कॉन्फ़िगर कर सकते हैं, लेकिन आप स्टैकट्रेस लेआउट रेंडरर को लपेट सकते हैं ताकि आप अपना एन्क्रिप्शन लागू कर सकें।

आप NLog's source code repository में LayuoutRendererWrappers के उदाहरण देखते हैं।

असल में, लेआउट रेन्डररवापर का सामान्य प्रकृति का अर्थ है कि आप एक एन्क्रिप्टिंग रैपर लिख सकते हैं और इसे किसी भी लेआउट रेन्डरर पर लागू कर सकते हैं। तो, उदाहरण के लिए, आप स्टैक ट्रेस और संदेश एन्क्रिप्ट कर सकते हैं, लेकिन बाकी फ़ील्ड को स्पष्ट टेक्स्ट के रूप में छोड़ दें।

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} 

मैं

यहां आपके द्वारा किसी एनक्रिप्टिंग LayoutRendererWrapper लिख सकते हैं का एक उदाहरण (untested) है मुझे यकीन नहीं है कि आप इसे प्रोग्रामेटिक रूप से कैसे कॉन्फ़िगर करेंगे क्योंकि मैं आमतौर पर प्रोग्रामेटिक कॉन्फ़िगरेशन का उपयोग नहीं करता हूं।

+0

धन्यवाद है, मुझे लगता है कि यह है। –

+0

धन्यवाद। आपको अपने मुख्य में जोड़ना होगा: 'ConfigurationItemFactory.Default.LayoutRenderers । पंजीयन परिभाषा ("एन्क्रिप्ट करें", टाइपोफ (NLog.LayoutRenderers.Wrappers.EncryptLayoutRendererWrapper)); ' – daniel

1

मान लिया जाये कि आप एक विस्तार विधि Encrypt है कि आप एक String वस्तु पर कॉल कर सकते हैं कहा जाता है,

मैं दो समाधान देखें:

  • या तो जब अपने कोड में प्रवेश करने से आप अपने एन्क्रिप्ट फ़ंक्शन को कॉल करें :

 

logger.Trace("Sample trace message".Encrypt()); 

 

  • या आप घटनाओं लॉग इन करें और उन्हें बुनियादी NLog.Log() तरीकों के बजाय फोन करने के लिए नए तरीकों को बना सकते हैं:

 

class Log { 

    public static void TraceEncrypt(Logger logger, String message) { 
     LogEncrypt(logger, LogLevel.Trace, message); 
    } 

    public static void DebugEncrypt(Logger logger, String message) { 
     LogEncrypt(logger, LogLevel.Debug, message); 
    } 

    public static void InfoEncrypt(Logger logger, String message) { 
     LogEncrypt(logger, LogLevel.Info, message); 
    } 

    public static void WarnEncrypt(Logger logger, String message) { 
     LogEncrypt(logger, LogLevel.Warn, message); 
    } 

    public static void ErrorEncrypt(Logger logger, String message) { 
     LogEncrypt(logger, LogLevel.Error, message); 
    } 

    public static void FatalEncrypt(Logger logger, String message) { 
     LogEncrypt(logger, LogLevel.Fatal, message); 
    } 

    public static void LogEncrypt(Logger logger, LogLevel logLevel, String message) { 
     // Prepare log event 
     LogEventInfo logEvent = new LogEventInfo(logLevel, logger.Name, message.Encrypt()); 
     // Log data 
     logger.Log(logEvent); 
    } 
} 
+0

यह एक सभ्य alt –

संबंधित मुद्दे