2016-09-01 4 views
6

लिब्लॉग का उपयोग करते समय, क्या लॉगर को कॉल करना संभव है? यहाँ एक कार्यान्वयन विस्तार उपभोक्ता है, जो इस लाइब्रेरी का उपयोग कर के लाभ के सबसे अधिक है से छिपालिब्लॉग - लॉगर को कॉल करना

public class MyClass 
{ 
    private static readonly ILog Logger = LogProvider.For<MyClass>(); 
} 

लकड़हारा है: विकि सूचियों निम्न उदाहरण के उपयोग के लिए यह देखते हुए। इस तरह पुस्तकालय उपभोक्ता को चिंता करने की ज़रूरत नहीं है कि लॉगर्स कैसे तत्काल हैं। इस ब्लॉग पोस्ट को देखते हुए:

http://dhickey.ie/2015/06/capturing-log-output-in-tests-with-xunit2/

ऐसा लगता है कि बॉयलर प्लेट का एक बहुत लॉग उत्पादन पर कब्जा करने के लिए जोड़ा गया है, मैं दिया यह भी एक पुनः निर्देशित Serilog उत्पादन का उपयोग करता है पूरी तरह से दृष्टिकोण के बारे में यकीन नहीं है, यूनिट परीक्षण में, पुस्तकालय को देखते हुए अजीब लगता है कि केवल लॉगिंग अमूर्तता पर भरोसा करना चाहिए?

केवल विकल्प मैं वर्तमान के बारे में सोच सकते हैं:

लकड़हारा सम्मिलित करें - यह शायद पुस्तकालय के उपभोक्ता के लिए अजीब हो सकता है, और प्रत्येक पुस्तकालय तो यह खुद ILogger परिभाषा इंजेक्ट किया जा करने की जरूरत है कि ले जाएगा, अमूर्तता के फायदे को हराया।

वास्तविक लॉगिंग फ्रेमवर्क तक वायर करें - लॉग 4नेट या इसी तरह का उपयोग करने के लिए लिबलॉग के लिए वर्तमान लॉगप्रोवाइडर सेट करें, और फिर किसी भी तरह से लॉग 4नेट में एक नकली/स्टब लॉगर को आज़माएं और इंजेक्ट करें, और प्रॉक्सी के माध्यम से कॉल करें।

लॉगर को कॉल करने के लिए किसी भी अपेक्षाकृत सरल तरीके की सराहना की जाएगी, लेकिन मुझे संदेह है कि समानांतर परीक्षण निष्पादन समस्याएं पैदा करेगा, भले ही उपरोक्त लॉगर पर कॉल करना संभव हो?

+0

खो क्या के लिए आपको लॉग इन करने के लिए कॉल का परीक्षण करने की जरूरत है?आमतौर पर इसकी आवश्यकता नहीं होती है। – Artiom

+0

@ आर्टिम क्यों इसकी आवश्यकता नहीं होगी? किस तरह के परीक्षण लॉगिंग कवर? – Mig

+0

मुझे अपनी किसी भी परियोजना में ऐसी आवश्यकता नहीं है। यही कारण है कि मैं पूछ रहा था। – Artiom

उत्तर

0

मैं अपने प्रोजेक्ट में क्या किया है:

मैं अपने LoggerFactory बना लिया है। यह एनएलओगर के रूप में एक ही स्थिर तरीकों का खुलासा करता है।

public class LoggerFactory 
{ 
    private static ILoggerFactoryStrategy _loggerFactoryStrategy = new DummyLoggerFactoryStrategy(); 

    public static void Initialize(ILoggerFactoryStrategy loggerFactoryStrategy) 
    { 
     _loggerFactoryStrategy = loggerFactoryStrategy; 
    } 

    public ILogger GetLogger<T>() 
    { 
     return _loggerFactoryStrategy.GetLogger<T>(); 
    } 

    .... 
} 

डमी रणनीति केवल आउटपुट डीबग करने या कुछ भी करने के लिए लिख सकती है। एक और रणनीति की तरह ख़ाली दे सकता है:

public class LoggerFactoryStrategy : ILoggerFactoryStrategy 
{ 
    public ILogger GetLogger<T>() 
    { 
     //create LibLog instance instead with LogProvider.For<T>() 
     var nlogger = LogManager.GetLogger(typeof(T).Name); //create instance of NLogger 
     return new NLogLogger(nlogger); 
    } 
} 

और NlogLogger आवरण ख़ाली हो सकता है की तरह

internal class NLogLogger : ILogger 
{ 
    private readonly Logger _logger; 

    public NLogLogger(Logger logger) 
    { 
     _logger = logger; 
    } 

    public void Debug(string message) 
    { 
     _logger.Debug(message); 
    } 

    public void Warn(string message, params object[] args) 
    { 
     _logger.Warn(message, args); 
    } 

    public void Info(Exception exception) 
    { 
     _logger.Info(exception); 
    } 

    ...... 
} 

आवेदन शुरू होता है मैं उचित रणनीति क्या हुड के नीचे NLogger का उपयोग करता है के साथ प्रारंभ होता है।

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

इसके अलावा, इसने हमें पीसीएल परियोजनाओं में एनएलओगर का उपयोग करने की अनुमति दी।

+0

मुझे यकीन नहीं है कि इसे विशेष रूप से LibLog के साथ क्या करना है और लॉगजर को कॉल करना है? – Mig

+0

@ मिग ने एक उदाहरण जोड़ा – Artiom

0

लगभग सभी लॉगर्स के लिए लॉगिंग कॉन्फ़िगरेशन में आप लॉग विफल होने पर अपवाद फेंकने के लिए कॉन्फ़िगर कर सकते हैं।

nlog

<nlog throwExceptions="true"> 
... your nlog config 
</nlog> 

लेकिन LibLog द्वारा बनाई अमूर्त में से

नमूना आप इस सुविधाओं

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