mirror of
https://github.com/traefik/traefik.git
synced 2025-10-17 02:21:15 +02:00
181 lines
5.1 KiB
Markdown
181 lines
5.1 KiB
Markdown
---
|
|
title: "Logs and Access Logs"
|
|
description: "Logs and Access Logs in Traefik Proxy provide real-time insight into the health of your system. They enable swift error detection and intervention through alerts. By centralizing logs, you can streamline the debugging process during incident resolution."
|
|
---
|
|
|
|
## Logs
|
|
|
|
Logs concern everything that happens to Traefik itself (startup, configuration, events, shutdown, and so on).
|
|
|
|
### Configuration Example
|
|
|
|
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](https://github.com/traefik/traefik-helm-chart).
|
|
|
|
```yaml tab="Structured (YAML)"
|
|
log:
|
|
filePath: "/path/to/log-file.log"
|
|
format: json
|
|
level: INFO
|
|
```
|
|
|
|
```toml tab="Structured (TOML)"
|
|
[log]
|
|
filePath = "/path/to/log-file.log"
|
|
format = "json"
|
|
level = "INFO"
|
|
```
|
|
|
|
```yaml tab="Helm Chart Values"
|
|
logs:
|
|
general:
|
|
filePath: "/path/to/log-file.log"
|
|
format: json
|
|
level: INFO
|
|
```
|
|
|
|
## Access Logs
|
|
|
|
Access logs concern everything that happens to the requests handled by Traefik.
|
|
|
|
### Configuration Example
|
|
|
|
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](https://github.com/traefik/traefik-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.
|
|
|
|
```yaml tab="Structured (YAML)"
|
|
accessLog:
|
|
format: json
|
|
filters:
|
|
statusCodes:
|
|
- "200"
|
|
- "400-404"
|
|
- "500-503"
|
|
fields:
|
|
names:
|
|
ClientUsername: drop
|
|
headers:
|
|
defaultMode: keep
|
|
names:
|
|
User-Agent: redact
|
|
Content-Type: keep
|
|
```
|
|
|
|
```toml tab="Structured (TOML)"
|
|
[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"
|
|
```
|
|
|
|
```yaml tab="Helm Chart Values"
|
|
# 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
|
|
```
|
|
|
|
## Per-Router Access Logs
|
|
|
|
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:
|
|
|
|
```yaml tab="Structured (YAML)"
|
|
http:
|
|
routers:
|
|
my-router:
|
|
rule: "Host(`example.com`)"
|
|
service: my-service
|
|
observability:
|
|
accessLogs: false
|
|
```
|
|
|
|
```toml tab="Structured (TOML)"
|
|
[http.routers.my-router.observability]
|
|
accessLogs = false
|
|
```
|
|
|
|
```yaml tab="Kubernetes"
|
|
# 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
|
|
```
|
|
|
|
```bash tab="Labels"
|
|
labels:
|
|
- "traefik.http.routers.my-router.observability.accesslogs=false"
|
|
```
|
|
|
|
```json tab="Tags"
|
|
{
|
|
// ...
|
|
"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](./overview.md), or the global one.
|
|
|
|
## Log Formats
|
|
|
|
Traefik Proxy supports the following log formats:
|
|
|
|
- `common` - Traefik's extended CLF format (default)
|
|
- `genericCLF` - Generic CLF format compatible with standard log analyzers
|
|
- `json` - JSON format for structured logging
|
|
|
|
## Access Log Filters
|
|
|
|
You 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:
|
|
|
|
- **Status Codes:** Keep logs only for requests with specific HTTP status codes or ranges (e.g., `200`, `400-404`).
|
|
- **Retry Attempts:** Keep logs only when a request retry has occurred.
|
|
- **Minimum Duration:** Keep logs only for requests that take longer than a specified duration.
|
|
|
|
## Log Fields Customization
|
|
|
|
When using the `json` format, you can customize which fields are included in your access logs.
|
|
|
|
- **Request Fields:** You can choose to `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](../reference/install-configuration/observability/logs-and-accesslogs.md#available-fields).
|
|
- **Request Headers:** You can also specify which request headers should be included in the logs, and whether their values should be `kept`, `dropped`, or `redacted`.
|
|
|
|
!!! info
|
|
For detailed configuration options, refer to the [reference documentation](../reference/install-configuration/observability/logs-and-accesslogs.md).
|