Log output
Dependably writes structured logs to stdout. Every event is one object on one line, ready for Elastic Stack, AWS CloudWatch Logs, Datadog, Grafana Loki, or any other line-oriented log aggregator. Nothing needs to be enabled — the only choice is the format.
There is no in-app log viewer. Logs are write-only from the application's side; retrieval and search belong to whatever aggregator your deployment already runs. What Dependably does keep and serve in-app is the Audit log, which is a record of organization events, not of application diagnostics.
Choose a format
Set LOG_FORMAT (see Configuration):
| Value | Use it for |
|---|---|
json (default) |
Elastic Common Schema (ECS) JSON, one object per line — log-ingestion pipelines. |
text |
Human-readable console output — interactive docker logs tailing. |
Text format looks like this, with exception stack traces on the lines immediately following:
[2026-06-15 12:00:00.000 INF] Dependably.Api.NuGetController: Package pushed: my-pkg 1.0.0
The JSON fields
With LOG_FORMAT=json, each event conforms to the
Elastic Common Schema:
| Field | Always present | Description |
|---|---|---|
@timestamp |
yes | Event timestamp, ISO-8601 with offset. |
log.level |
yes | Verbose, Debug, Information, Warning, Error, or Fatal. |
message |
yes | The rendered message. |
ecs.version |
yes | ECS schema version. |
log.logger |
when set | Full type name of the logger. |
trace.id, span.id |
when set | Trace and span IDs from the current activity. |
labels |
varies | Every remaining property. Sensitive values are already redacted to [REDACTED] before the formatter sees them. |
One event, formatted here for readability — real output is a single line:
{
"@timestamp": "2026-06-15T12:00:00.000+00:00",
"log.level": "Information",
"message": "Package pushed: my-pkg 1.0.0",
"ecs.version": "9.0.0",
"log": { "logger": "Dependably.Api.NuGetController" },
"labels": { "OrgId": "default", "Ecosystem": "nuget", "PackageName": "my-pkg", "Version": "1.0.0" }
}
What each level means
| Level | Used for |
|---|---|
Verbose |
Fine-grained diagnostics. Off in production by default. |
Debug |
Periodic heartbeats and operational ticks — a cleanup pass starting, a stats refresh finishing. |
Information |
Normal operational events: pushes, proxy hits, first boot. |
Warning |
Recoverable anomalies: upstream timeouts, checksum mismatches, skipped schema migrations. |
Error |
Failed requests and exceptions caught at the boundary. |
Fatal |
Unrecoverable startup failures. |
Ship them to CloudWatch
- Run the container with the
awslogslog driver (or Firelens/FluentBit) pointed at a CloudWatch log group. - Leave
LOG_FORMATat itsjsondefault. - Query the ECS fields directly in CloudWatch Logs Insights:
fields `@timestamp`, `log.level`, message, `log.logger`
| filter `log.level` = "Error"
| sort `@timestamp` desc
Ship them over OTLP
Set OTEL_EXPORTER_OTLP_ENDPOINT and logs are forwarded to that collector in
addition to the always-on stdout sink — stdout never stops. Air-gapped
deployments leave the variable unset and consume stdout only.
Metrics have their own path: see the Grafana dashboard guide.