C# 如何在azure功能中同时使用日志编写器和应用程序洞察?

C# 如何在azure功能中同时使用日志编写器和应用程序洞察?,c#,.net,azure,azure-functions,azure-application-insights,C#,.net,Azure,Azure Functions,Azure Application Insights,我想将跟踪和其他事件发送到ILogger和应用程序洞察 我知道我可以简单地做到这一点: [FunctionName ("OnSomethingHttpTriggered")] public static async System.Threading.Tasks.Task RunAsync ([QueueTrigger ("myq", Connection = "StorageAccountConnection")] string payload, ILogger log) {

我想将跟踪和其他事件发送到
ILogger
和应用程序洞察

我知道我可以简单地做到这一点:

    [FunctionName ("OnSomethingHttpTriggered")]
    public static async System.Threading.Tasks.Task RunAsync ([QueueTrigger ("myq", Connection = "StorageAccountConnection")] string payload, ILogger log) {
        var telemetry = new TelemetryClient {
        InstrumentationKey = Environment.GetEnvironmentVariable ("APPINSIGHTS_INSTRUMENTATIONKEY")
        };
        log.LogInformation ($"C# Queue trigger function processed: {payload}");
        telemetry.TrackEvent ($"C# Queue trigger function processed: {payload}");

        var isPayloadValidSchema = SchemaValidator.IsValid (payload);
        if (!isPayloadValidSchema) {
            log.LogError ($"This visit is not valid {payload}");
            telemetry.TrackEvent ($"This visit is not valid {payload}");
            return;
        }
    }
但是正如您所看到的,对于
ILogger
TelemetryClient
,我需要每次将代码加倍


如何避免这种重复?

我们不需要
TeletRyclient
来发送
ILogger
的输出,一旦我们在应用程序设置中设置了
APPINSIGHTS\u INSTRUMENTATIONKEY
(本地值为local.setting.json),默认情况下这些将在应用程序洞察中。我们使用
teletryclient
发送。

您是否可以在您自己的
SuperLogger
对象中进行DI(类似于您对
ILogger
所做的操作),该对象具有
ILogger
teletryclient
作为构造函数注入依赖项?然后在您自己的
SuperLogger
中调用一个方法,然后调用这两个方法。一旦我们打开appinsights,ILogger输出默认发送到Application Insights,这就是您想要的吗?@JerryLiu是的。你是说我甚至不需要使用
TeletRyclient
?@l--l--l--l--l--“我们真的不需要它,除非你有一些自定义事件要跟踪。