Azure फ़ंक्शन V3 का उपयोग करते हुए, मैं मौजूदा Ilogger को नई कक्षा फ़ाइल में कैसे इंजेक्ट करूं?
मैंने VS2019 का उपयोग करके एक नया एज़्योर फ़ंक्शन, वी 3, कोर 3.1 बनाया है। यह एक बुनियादी HTTPTrigger का उपयोग करता है। मैंने एक नई क्लास फाइल बनाई है और मौजूदा इलॉगर को इसमें इंजेक्ट करना चाहूंगा। यह कैसे हासिल किया जा सकता है? मैं इसके लिए नया हूँ इसलिए किसी भी मदद की सराहना की जाएगी।
संपादित करें:
तो अंत में यह पता चला, इस मामले को जटिल बना दिया गया था। V3 फ़ंक्शन पहले से ही ILogger के साथ लॉगिंग के लिए कॉन्फ़िगर किया गया है, इस पोस्ट के अनुसार एक बग है जो किसी भी वर्ग के साथ बनाए गए लॉग को फ़िल्टर करता है जो फ़ंक्शन से शुरू नहीं होता है: DI के माध्यम से प्रदान किए गए ILogger उदाहरण का उपयोग करने में असमर्थ
मुझे बस इतना करना है कि लकड़हारे को कक्षा में इंजेक्ट किया जाए:
private readonly ILogger _logger;
public ClassName(ILogger<ClassName> logger)
{
_logger = logger;
}
तो बस इसे बुलाया:
_logger.LogInformation("Log Message");
मैं उपरोक्त पद के विकल्प 1 के साथ गया और hostp.json फ़ाइल में नाम स्थान जोड़ दिया:
"logLevel": {
"NamespaceName": "Information"
}
जवाब
मेरे पास एक फंक्शन है जो ऐप इनसाइट्स में लॉग्स लिखता है और मैं ILogger का उपयोग करता हूं।
आप अपनी अन्य सेवा / सहायक कक्षाओं में डिपेंडेंसी इंजेक्शन के साथ इस तरह के इलोजर का उपयोग कर सकते हैं।
public interface IExampleClass
{
void ExampleMethod();
}
public class ExampleClass : IExampleClass
{
private readonly ILogger<ExampleClass> _logger;
public ExampleClass(ILogger<ExampleClass> logger)
{
_logger = logger;
}
public void ExampleMethod()
{
_logger.LogInformation("Example info log");
}
}
मैं स्टार्टअप फ़ाइल में लॉगिंग सक्षम करता हूं और DI रजिस्टर करता हूं।
class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services.AddLogging();
builder.Services.AddTransient<ExampleClass, IExampleClass>();
}
}
जिसे मुख्य वर्ग द्वारा मंगाया जा सकता है।
public class ThisIsAnAzureFunction
{
private readonly IExampleClass _exampleClass;
public ThisIsAnAzureFunction(IExampleClass exampleClass)
{
_exampleClass = exampleClass;
}
[FunctionName("SomeAzureFunctionName")]
public async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req, ILogger log)
{
try
{
//Try some stuff
}
catch (Exception exception)
{
//Log some stuff
log.LogError(exception);
throw;
}
}
}