संभव? एक "सिंक फारवर्डर" नहीं मिल सकता है, जहां एक सिंक कई अन्य सिंकों को अग्रेषित कर सकता है, संभवतः एक ही प्रकार का।

सेरिलोग्स दस्तावेज़ीकरण (https://github.com/serilog/serilog/wiki/AppSettings ) स्पष्ट रूप से कहता है कि

नोट: सेरिलॉग का उपयोग करते समय: कुंजियां अद्वितीय होनी चाहिए।*

इसलिए एक ही सेक सिंक को कई बार जोड़ना एक अच्छा विचार नहीं है।

मैं उसी अवधारणा की तलाश कर रहा हूं जैसे log4net में, जहां एक लकड़हारा कई एपेंडर रख सकता है।

1
Toke Breer-Mortensen 14 नवम्बर 2018, 14:47

2 जवाब

सबसे बढ़िया उत्तर

दुर्भाग्य से <appSettings> सेरिलोग के लिए कॉन्फ़िगरेशन प्रदाता इस मामले का समर्थन नहीं करता है; यदि आप इसका उपयोग करने में सक्षम हैं तो appSettings.json एक करता है, अन्यथा कोड WriteTo.Seq(...).WriteTo.Seq(...) में सिंक को कॉन्फ़िगर करने का तरीका है।

1
Nicholas Blumhardt 15 नवम्बर 2018, 23:59

समाधान की अर्ध-समाधान शैली:

  1. ऐपसेटिग्स में "रीड इन कीज़" डालें

उदाहरण 1: एक कुंजी पढ़ें

<add key="SerilogToHttpKeys" value="MyMachineA" />

उदाहरण 2 (जो समस्या को हल करता है): कई कुंजियाँ पढ़ें

<add key="SerilogToHttpKeys" value="MyMachineA, MyLocalMachine, MachineOnTheMoon" />

दोनों मामले असीमित संख्या में कुंजियों को "अंक" करते हैं, जिन्हें तब कोड के माध्यम से पढ़ा जाता है (देखें 2) और इसलिए w/out recompiling को ट्वीक किया जा सकता है

<add key="MyLocalMachine" value="http://localhost:5341/;juzOPqqqqqqqq" />
<add key="MyMachineA" value="http://10.107.14.57:5341/;m8QVnDaqqqqqqqqqqqqq" />
<add key="MachineOnTheMoon" value="http://10.107.14.62:5341/;Ah0tSzqqqqqqqqqqqq" 
  1. कोड में कुंजियों को लूप करें - प्रत्येक कुंजी एक एपीआई कुंजी के साथ एक http पते की ओर इशारा करती है, जिसका उपयोग Seq में लॉगिंग के लिए किया जाता है, लेकिन प्रत्येक प्रविष्टि की संरचना को बदल देता है, और आप ect फ़ाइल करने के लिए लॉग इन कर सकते हैं।

     foreach (var aKey in System.Configuration.ConfigurationManager.AppSettings.Get("SerilogToHttpKeys")
                                .Split(',')//Use , as separator 
                                .Select(s => s.Trim()))
     {
         var    fields    = System.Configuration.ConfigurationManager.AppSettings.Get(aKey);
         var    separator = ';';
         string serverUrl = fields.Split(separator)[0];
         string apiKey    = fields.Split(separator)[1];
    
         loggerConfiguration = loggerConfiguration.WriteTo.Seq(serverUrl: serverUrl, apiKey: apiKey);
     }
    

मैं इसे एक ही समय में अपने सर्वर और मेरी देव मशीन दोनों में लॉगिंग के लिए उपयोग करता हूं - त्रुटियों के होने पर स्थानीयहोस्ट सेक को खोलना आसान होता है, और देखें कि सर्वर में लॉग इन करने के बजाय मैं उन्हें वहां ढूंढ सकता हूं या नहीं। हालाँकि, यदि मेरा देवमाचिन ऑनलाइन नहीं है, तो मेरे पास सर्वर पर भी लॉग हैं। बेशक, यदि एक से अधिक व्यक्ति सर्वर का उपयोग करते हैं तो Seq के लिए लाइसेंस की आवश्यकता होती है, लेकिन एक साधारण "एक देव, एक देव-मशीन, एक सर्वर" में यह काम करता है।

0
Toke Breer-Mortensen 11 अगस्त 2020, 08:09