首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NUnit、Serilog和Datadog

NUnit、Serilog和Datadog
EN

Stack Overflow用户
提问于 2020-04-24 09:48:45
回答 2查看 1.7K关注 0票数 0

我们面临着使用NUnit、Serilog和Datadog的问题。

我们的配置

我们正在与以下方面合作:

NUnit3TestAdapter

  • Serilog

  • .NET Core 3.1 (VisualStudio16.5.4)

  • NUnit+.NET+ Serilog.Sinks.Datadog.Logs

所有的包都是NuGet最新的。

Serilog组态

这是我们正在使用的Serilog配置:

代码语言:javascript
复制
DatadogConfiguration datadogConfiguration = new DatadogConfiguration()
{
  Url = "https://http-intake.logs.datadoghq.eu",
  Port = 443,
  UseSSL = true,
  UseTCP = false
};

ServiceProvider = new ServiceCollection()
  .AddSingleton<IMyService, MyService>()
  .AddLogging(configure => configure.AddSerilog(
    new LoggerConfiguration()
    .MinimumLevel.Verbose()
    .Enrich.WithMachineName()
    .Enrich.WithProcessName()
    .Enrich.WithProcessId()
    .Enrich.WithThreadName()
    .Enrich.WithThreadId()
    .Enrich.WithProperty("Application", "Serilog Test Application")
    .Enrich.WithExceptionDetails()
    .WriteTo.Debug(
      outputTemplate: "[{Timestamp:o} {Level:u3}] [{MachineName}] [{ProcessName}:{ProcessId}] [{ThreadName}:{ThreadId}] [{Application}] [{SourceContext}] {Message:lj}{Exception}{Properties:j}{NewLine}")
    .WriteTo.File(
      path: "D:\\Temp\\LogFile.txt",
      outputTemplate: "[{Timestamp:o} {Level:u3}] [{MachineName}] [{ProcessName}:{ProcessId}] [{ThreadName}:{ThreadId}] [{Application}] [{SourceContext}] {Message:lj}{Exception}{Properties:j}{NewLine}")
    .WriteTo.DatadogLogs(
      "API_KEY",
      source: "csharp",
      service: "test service (by code)",
      host: "Serilog test application",
      tags: new string[] { "TAG_1:VALUE_1", "TAG_2:VALUE_2" },
      configuration: datadogConfiguration)
    .CreateLogger()))
  .BuildServiceProvider();

测试

我们正在调试运行( Visual中的F5键)和NUnit测试环境(在Visual中)中测试此配置。

问题所在

我们面临的问题是,在调试过程中,运行所有工作都很好:

  • 日志正确到达Visual输出。
  • 日志正确到达文件;
  • 日志正确到达Datadog.

当我们在NUnit环境中运行此代码时:

  • 日志正确到达Visual输出。
  • 日志正确到达文件。

但是没有日志到达Datadog

使用Fiddler检查网络流时,我们注意到在调试运行时,日志被发送到Datadog,在NUnit环境下,日志不被发送到Datadog

有什么想法或建议吗?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2020-12-30 08:52:27

我对这么晚的答复感到很抱歉。

在与Datadog支持人员交换了一堆电子邮件之后,发现解决方案很简单:

代码语言:javascript
复制
[OneTimeTearDown]
public virtual void Cleanup()
{
    logger.Dispose();
}

Dispose()方法强制接收器优雅地关闭并发送存储在缓存中的日志。

请注意,日志不会立即出现在Datadog控制台中:允许他们的系统处理您发送的日志几秒钟(到几分钟)。

票数 1
EN

Stack Overflow用户

发布于 2020-07-09 10:23:09

只需将其添加到startup.cs中即可。

代码语言:javascript
复制
var config = new DatadogConfiguration("https://http-intake.logs.datadoghq.eu");
        Serilog.Log.Logger = new LoggerConfiguration()
       .WriteTo.DatadogLogs("<Datadog_API_KEY>", configuration: config)
       .CreateLogger();
// Call this from anywhere in the app
Serilog.Log.Logger.Information("This is a test from session-start");
Serilog.Log.Logger.Error("This is a test from session-start");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61405563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档