docs/content/observe/logs-and-access-logs.md
Logs concern everything that happens to Traefik itself (startup, configuration, events, shutdown, and so on).
To enable and configure logs in Traefik Proxy, you can use the static configuration file or Helm values if you are using the Helm chart.
log:
filePath: "/path/to/log-file.log"
format: json
level: INFO
[log]
filePath = "/path/to/log-file.log"
format = "json"
level = "INFO"
logs:
general:
filePath: "/path/to/log-file.log"
format: json
level: INFO
Access logs concern everything that happens to the requests handled by Traefik.
To enable and configure access logs in Traefik Proxy, you can use the static configuration file or Helm values if you are using the Helm chart.
The following example enables access logs in JSON format, filters them to only include specific status codes, and customizes the fields that are kept or dropped.
accessLog:
format: json
filters:
statusCodes:
- "200"
- "400-404"
- "500-503"
fields:
names:
ClientUsername: drop
headers:
defaultMode: keep
names:
User-Agent: redact
Content-Type: keep
[accessLog]
format = "json"
[accessLog.filters]
statusCodes = ["200", "400-404", "500-503"]
[accessLog.fields]
[accessLog.fields.names]
ClientUsername = "drop"
[accessLog.fields.headers]
defaultMode = "keep"
[accessLog.fields.headers.names]
"User-Agent" = "redact"
"Content-Type" = "keep"
# values.yaml
logs:
access:
enabled: true
format: json
filters:
statusCodes:
- "200"
- "400-404"
- "500-503"
fields:
names:
ClientUsername: drop
headers:
defaultMode: keep
names:
User-Agent: redact
Content-Type: keep
You can enable or disable access logs for a specific router. This is useful for turning off logging for noisy routes while keeping it on globally.
Here's an example of disabling access logs on a specific router:
http:
routers:
my-router:
rule: "Host(`example.com`)"
service: my-service
observability:
accessLogs: false
[http.routers.my-router.observability]
accessLogs = false
# ingressroute.yaml
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: my-router
spec:
routes:
- kind: Rule
match: Host(`example.com`)
services:
- name: my-service
port: 80
observability:
accessLogs: false
labels:
- "traefik.http.routers.my-router.observability.accesslogs=false"
{
// ...
"Tags": [
"traefik.http.routers.my-router.observability.accesslogs=false"
]
}
When the observability options are not defined on a router, it inherits the behavior from the entrypoint's observability configuration, or the global one.
Traefik Proxy supports the following log formats:
common - Traefik's extended CLF format (default)genericCLF - Generic CLF format compatible with standard log analyzersjson - JSON format for structured loggingYou can configure Traefik Proxy to only record access logs for requests that match certain criteria. This is useful for reducing the volume of logs and focusing on specific events.
The available filters are:
200, 400-404).When using the json format, you can customize which fields are included in your access logs.
keep, drop, or redact any of the standard request fields. A complete list of available fields like ClientHost, RequestMethod, and Duration can be found in the reference documentation.kept, dropped, or redacted.!!! info For detailed configuration options, refer to the reference documentation.