.net core NUnit、Serilog和Datadog

.net core NUnit、Serilog和Datadog,.net-core,nunit,serilog,datadog,.net Core,Nunit,Serilog,Datadog,我们在使用NUnit、Serilog和Datadog时面临一个问题 我们的配置 我们正在与: .NET核心3.1(Visual Studio 16.5.4) NUnit+NUnit3TestAdapter Serilog+Serilog.Sinks.Datadog.Logs 所有软件包都是最新的 Serilog配置 这是我们正在使用的Serilog配置: DatadogConfiguration datadogConfiguration = new DatadogConfiguration(

我们在使用NUnit、Serilog和Datadog时面临一个问题

我们的配置 我们正在与:

  • .NET核心3.1(Visual Studio 16.5.4)
  • NUnit+NUnit3TestAdapter
  • Serilog+Serilog.Sinks.Datadog.Logs
所有软件包都是最新的

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

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();
DatadogConfiguration DatadogConfiguration=newdatadogconfiguration()
{
Url=”https://http-intake.logs.datadoghq.eu",
端口=443,
usesl=true,
UseTCP=false
};
ServiceProvider=新的ServiceCollection()
.AddSingleton()
.AddLogging(configure=>configure.AddSerilog(
新LoggerConfiguration()
.MinimumLevel.Verbose()
.Enrich.WithMachineName()
.Enrich.WithProcessName()
.Enrich.WithProcessId()
.Enrich.WithThreadName()
.Enrich.WithThreadId()
.Enrich.WithProperty(“应用程序”、“Serilog测试应用程序”)
.Enrich.WithExceptionDetails()
.WriteTo.Debug(
输出模板:“[{Timestamp:o}{Level:u3}][{MachineName}][{ProcessName}:{ProcessId}][{ThreadName}:{ThreadId}][{Application}][{SourceContext}]{Message:lj}{Exception}{Properties:j}{NewLine}”)
.WriteTo.File(
路径:“D:\\Temp\\LogFile.txt”,
输出模板:“[{Timestamp:o}{Level:u3}][{MachineName}][{ProcessName}:{ProcessId}][{ThreadName}:{ThreadId}][{Application}][{SourceContext}]{Message:lj}{Exception}{Properties:j}{NewLine}”)
.WriteTo.DatadogLogs(
“API_密钥”,
资料来源:“csharp”,
服务:“测试服务(按代码)”,
主机:“Serilog测试应用程序”,
tags:newstring[]{“TAG_1:VALUE_1”,“TAG_2:VALUE_2”},
配置:datadogConfiguration)
.CreateLogger())
.BuildServiceProvider();
测试 我们正在调试运行(VisualStudio中的F5键)和NUnit测试环境(VisualStudio中)中测试此配置

问题 我们面临的问题是,在调试运行时,所有工作都正常:

  • 日志正确到达Visual Studio调试输出
  • 日志正确归档
  • 日志正确到达Datadog
在NUnit环境中运行此代码时:

  • 日志正确到达Visual Studio调试输出
  • 日志正确归档
但是没有日志到达Datadog

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

有什么想法或建议吗


谢谢

只需将此添加到startup.cs

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");
var config=new DatadogConfiguration(“https://http-intake.logs.datadoghq.eu");
Serilog.Log.Logger=新的LoggerConfiguration()
.WriteTo.DatadogLogs(“,配置:config)
.CreateLogger();
//从应用程序中的任何位置调用此功能
Serilog.Log.Logger.Information(“这是从会话开始的测试”);
Serilog.Log.Logger.Error(“这是从会话开始的测试”);

我很抱歉这么晚才回答

在与Datadog支持人员交换了大量电子邮件后,结果证明解决方案非常简单:

[OneTimeTearDown]
public virtual void Cleanup()
{
    logger.Dispose();
}
Dispose()
方法强制接收器正常关闭并发送存储在缓存中的日志


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

您找到解决方案了吗?我想没有。。。。