📝 Log to stdout/stderr, Not Files
Log files inside container fill disk. Container restarts lose logs. Docker captures stdout/stderr. Use docker logs.
✅ Good vs Bad
// ❌ BAD: Writing to file
File.WriteAllText("/app/logs/app.log", message);
// ✅ GOOD: Console output
Console.WriteLine(message);
// ❌ BAD: Log4Net to file
// ✅ GOOD: Serilog to Console
// Docker command to see logs
docker logs container_name
docker logs -f container_name # follow
docker logs --tail 100 container_name
docker logs --since 2024-01-01 container_name
🎯 JSON Logging
// Structured logging (JSON)
Console.WriteLine(JsonSerializer.Serialize(new {
level = "Information",
message = "User logged in",
userId = 123,
timestamp = DateTime.UtcNow
}));
// Docker parses JSON logs automatically
docker logs --details container_name
// Log drivers
docker run --log-driver json-file --log-opt max-size=10m --log-opt max-file=3
docker run --log-driver fluentd --log-opt fluentd-address=localhost:24224
💡 Log Management
- Set log rotation: –log-opt max-size=10m –log-opt max-file=3
- Use Fluentd, Logstash, or Loki for aggregation
- ELK stack (Elasticsearch, Logstash, Kibana) for centralized logging
- Never store logs inside container (they disappear on restart)
“Container crashed. Log file inside container lost. Switched to stdout. Now docker logs shows everything. Even after restart. Never write logs to files in containers.”
