Wie füge ich mit Azure Function V3 vorhandenen Ilogger in eine neue Klassendatei ein?
Ich habe mit VS2019 eine neue Azure-Funktion, V3, CORE 3.1, erstellt. Es wird ein grundlegender HTTPTrigger verwendet. Ich habe eine neue Klassendatei erstellt und möchte den vorhandenen Ilogger in diese einfügen. Wie kann dies erreicht werden? Ich bin neu in diesem Bereich, daher wäre jede Hilfe dankbar.
BEARBEITEN:
Also endlich herausgefunden, war die Sache zu kompliziert. V3-Funktionen sind bereits für die Protokollierung mit ILogger konfiguriert. Laut diesem Beitrag gibt es einen Fehler, der alle Protokolle herausfiltert, die mit einer Kategorie erstellt wurden, die nicht mit Funktion beginnt: Die über DI bereitgestellte ILogger-Instanz kann nicht verwendet werden
Alles was ich tun musste, war den Logger wie folgt in die Klasse zu injizieren:
private readonly ILogger _logger;
public ClassName(ILogger<ClassName> logger)
{
_logger = logger;
}
Dann nannte es einfach wie:
_logger.LogInformation("Log Message");
Ich habe Option 1 aus dem obigen Beitrag gewählt und den Namespace in die Datei host.json eingefügt:
"logLevel": {
"NamespaceName": "Information"
}
Antworten
Ich habe eine Funktion, die Protokolle in App Insights schreibt, und ich verwende ILogger.
Sie können ILogger wie diesen mit Dependency Injection in Ihren anderen Service- / Hilfsklassen verwenden.
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");
}
}
Ich aktiviere die Anmeldung in der Startdatei und registriere DI.
class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services.AddLogging();
builder.Services.AddTransient<ExampleClass, IExampleClass>();
}
}
Welches von der Hauptklasse aufgerufen werden kann.
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;
}
}
}