我们面临着使用NUnit、Serilog和Datadog的问题。
我们的配置
我们正在与以下方面合作:
NUnit3TestAdapter
所有的包都是NuGet最新的。
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();测试
我们正在调试运行( Visual中的F5键)和NUnit测试环境(在Visual中)中测试此配置。
问题所在
我们面临的问题是,在调试过程中,运行所有工作都很好:
当我们在NUnit环境中运行此代码时:
但是没有日志到达Datadog。
使用Fiddler检查网络流时,我们注意到在调试运行时,日志被发送到Datadog,在NUnit环境下,日志不被发送到Datadog。
有什么想法或建议吗?
谢谢
发布于 2020-12-30 08:52:27
我对这么晚的答复感到很抱歉。
在与Datadog支持人员交换了一堆电子邮件之后,发现解决方案很简单:
[OneTimeTearDown]
public virtual void Cleanup()
{
logger.Dispose();
}Dispose()方法强制接收器优雅地关闭并发送存储在缓存中的日志。
请注意,日志不会立即出现在Datadog控制台中:允许他们的系统处理您发送的日志几秒钟(到几分钟)。
发布于 2020-07-09 10:23:09
只需将其添加到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");https://stackoverflow.com/questions/61405563
复制相似问题