使用Serilog Sink无Agent方式向DataDog(EU节点)发送日志失败求助
Hey there, let's walk through why your logs aren't showing up in Datadog EU. I've gone through your setup details, and here are some common pitfalls and fixes to check off:
1. Log Level Mismatch is Blocking Most of Your Logs
Looking at your appsettings.json, your default Serilog minimum level is set to Error, and you only override My.App.Namespace.Something to log at Information level. But in your controller, you're calling logger.LogInformation("Test information") on MySiteController—which isn't under that overridden namespace.
That means your info and warning logs won't even be sent to the Datadog sink at all! Only your LogError call should qualify, but let's fix this first to test all log levels:
"MinimumLevel": { "Default": "Information", "Override": { "Microsoft": "Error", "System": "Error" } }
Or update the override to include your controller's namespace, like My.App.Namespace.Controllers if that's where MySiteController lives.
2. Incorrect Datadog EU Endpoint
Your current config uses http-intake.logs.datadoghq.eu, but the agentless Serilog sink expects the full HTTPS endpoint including the path. Missing the path can cause silent failures. Update it to:
"configuration": { "Url": "https://http-intake.logs.datadoghq.eu/v1/input" }
This is the standard intake endpoint for EU regions—this is the exact path I've used for multiple agentless setups.
3. API Key Permissions & Typos
Make sure your API key has Logs Write permissions enabled in your Datadog EU account. It's easy to copy a truncated key or use one from a different region (US vs EU)—double-check the key matches what's in your Datadog EU org settings.
4. Enable Debug Logging for the Datadog Sink
The sink might be failing silently. Turn on debug mode to see exactly what's going wrong:
{ "Name": "DatadogLogs", "Args": { "apiKey": "d7...b07", "source": "something", "host": "noideawhatgoeshere", "configuration": { "Url": "https://http-intake.logs.datadoghq.eu/v1/input" }, "debug": true } }
Then check your console logs (since you have the Console sink enabled) for error messages from the Datadog sink—this will tell you if there's a connection timeout, auth failure, or invalid payload.
5. Async Batching Might Be Holding Logs
Serilog's Datadog sink uses async batching by default. If your app shuts down right after logging, the batch might never get sent. Try forcing immediate flushing for testing:
Add these args to your Datadog sink config:
"batchSizeLimit": 1, "period": "00:00:01"
This sends logs as soon as they're generated instead of waiting for a batch to fill up. Also, make sure you dispose the logger when your app exits:
// In your setup code after creating the logger AppDomain.CurrentDomain.ProcessExit += (sender, e) => logger.Dispose();
6. Host Field (Minor But Worth Checking)
You set "host": "noideawhatgoeshere"—while this is optional, a malformed value could cause unexpected issues. Try setting it to your machine name dynamically instead:
// In your LoggerConfiguration chain .Enrich.WithProperty("host", Environment.MachineName)
7. Double-Check Datadog Log Explorer Filters
Even if logs are sent, you might be looking in the wrong place. Go to Datadog's Log Explorer, set the time range to the last 5 minutes, and filter by source:something (since that's what you set in the config). Also, check the "All Logs" view instead of a specific service—sometimes logs end up in unexpected places.
Let me know if any of these steps get your logs showing up, or if you find any debug messages that point to a specific issue!
备注:内容来源于stack exchange,提问作者Jimmyt1988

