小编Vin*_*ter的帖子

如何通过 AppSettings 设置 Application Insights for Serilog 的遥测配置

对于我的 ASP.NET 5 Web 项目,我想通过 Serilog 登录到 Application Insights。现在我终于把一切都搞定了,但我不敢相信这是他们要走的路。我希望你能帮助我改进它。

我看到的主要问题是 Application Insights 的 Instrumentation Key 都是在 appsettings.json 的 Serilog 和 ApplicationInsights 部分中配置的。我希望 Serilog 使用默认/活动客户端(和配置),但它似乎根据自己的配置创建第二个客户端。

https://github.com/serilog/serilog-sinks-applicationinsights上的文档说:

如上所述,您还可以传递检测密钥,但不鼓励这样做

如果我从 appsettings.json 的 Serilog 部分中删除 InstrumentationKey 设置,它不会再将任何 Serilog 语句记录到 Application Insights。为了解决这个问题,我看到你可以使用.WriteTo.ApplicationInsights(TelemetryConfiguration.Active, TelemetryConverter.Traces),但我不想要硬编码配置,更喜欢通过 appsettings.json 来完成。另外,我担心有两个客户端/配置,不会提供最佳性能。

现在,有没有什么方法可以通过 appsettings.json 进行配置,而不必复制检测密钥?

程序.cs

public static void Main(string[] args)
{
    LoggingExtensions.SetupLoggerConfiguration(AppName, AppVersion);

    try
    {
        Log.Information("Starting web host for {0}", AppName);
        CreateHostBuilder(args).Build().Run();
    }
    catch (Exception ex)
    {
        Log.Fatal(ex, "Host terminated unexpectedly");
    }
    finally
    {
        Log.CloseAndFlush();
    }
}

public …
Run Code Online (Sandbox Code Playgroud)

.net c# serilog azure-application-insights asp.net-core

13
推荐指数
0
解决办法
8076
查看次数

在 .NET 5 中测试 Azure 函数

我已经开始开发 Azure Functions,现在我想创建我的第一个单元/集成测试,但我完全卡住了。虽然我有一个非常简单的函数,带有 HTTP 触发器和 HTTP 和存储队列输出,但测试它似乎非常复杂。

代码(简化):

public class MyOutput
{
    [QueueOutput("my-queue-name", Connection = "my-connection")]
    public string QueueMessage { get; set; }

    public HttpResponseData HttpResponse { get; set; }
}

public static class MyFunction
{
    [Function(nameof(MyFunction))]
    public static async Task<MyOutput> Run(
        [HttpTrigger(AuthorizationLevel.Function, "POST")] HttpRequestData req,
        FunctionContext executionContext)
    {
        var logger = executionContext.GetLogger(nameof(MyFunction));
        logger.LogInformation("Received {Bytes} bytes", req.Body.Length);
        //implementation
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我希望构建一个这样的测试:

public async Task Test()
{
    var response = await MyFunction.Run(..., ...);
    Assert.IsNotNull(response);
}
Run Code Online (Sandbox Code Playgroud)

在互联网上找了几个小时找到一个好的方法后,我仍然没有找到一种方法来模拟HttpRequestDataFunctionContext. 我还通过设置服务器来寻找完整的集成测试,但这似乎非常复杂。我最终得到的唯一结果是: …

.net azure azure-functions

3
推荐指数
1
解决办法
712
查看次数