Logs error matcher
Paste a log and see which lines are known errors, what each one means and what to do first. The log is masked and matched in this browser: IP addresses, e-mails, tokens and passwords never reach the screen, and nothing is sent.
Paste the text, or choose a file from your computer. Up to 8192 KiB.
0 of 8192 KiB
What it does
It reads a log line by line and recognizes the errors that stop or break self-hosted services most often: Docker (a port already allocated, the daemon or its socket, an image for another CPU, a missing command, an image that cannot be pulled, no network ranges left), PostgreSQL and MariaDB / MySQL (logins, roles, connections, data from another version, two servers on one data directory), nginx and Caddy (upstreams refused, timed out or not found, configuration errors), certificates (ACME validation, rate limits, expired or untrusted certificates), Node.js and Python (missing modules, the heap limit, Gunicorn timeouts) and Linux itself (the OOM killer, a full disk, a port in use, refused connections, names that do not resolve, read-only file systems, open file limits, permissions). Each error comes with what it means, what to do first, the official documentation, and the wizard or tool of this site that continues from it.
How it works
- Paste the log or choose a file, up to 8 MiB. It is read on this page in a background worker, so the page stays responsive on a long log; nothing is uploaded, stored or sent to analytics.
- The log is masked first: IP addresses (except 0.0.0.0, loopback and netmasks), e-mail addresses, tokens and keys, passwords in URLs and values of variables whose names look like secrets. Everything shown, copied, downloaded or handed off comes from the masked log.
- Each line is compared with a fixed list of known errors, written as patterns that cannot run away on a long or hostile line. The first, most specific match explains the line: an nginx line that says a port is in use is explained as a port in use.
- The result groups the lines by error, with their line numbers, so you can find them in the original. The same log always gives the same result.
Example
The log of a small Compose stack: the database rejects the app's password, the app tries localhost instead of the database service, then runs out of heap, and nginx answers 502.
db-1 | 2026-10-12 08:14:03.512 UTC [1] LOG: database system is ready to accept connections
db-1 | 2026-10-12 08:14:09.877 UTC [68] FATAL: password authentication failed for user "app"
app-1 | Error: connect ECONNREFUSED 127.0.0.1:5432
app-1 | at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1611:16)
app-1 | notify: sending alert to [email protected]
app-1 | FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory
proxy-1 | 2026/10/12 08:15:01 [error] 29#29: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 203.0.113.7, server: example.com, request: "GET / HTTP/1.1", upstream: "http://172.18.0.4:3000/", host: "example.com"
What the matcher finds (masked):
PostgreSQL rejected the password
PostgreSQLThe server checked the password and it did not match the role's. With the official image, a common cause:
POSTGRES_PASSWORDwas changed after the data directory was created, and it is read only on the first start.What to do: Use the password the data directory was created with, or change it inside the database (
ALTER ROLE <user> PASSWORD '...'). Removing the volume resets it, and deletes the data.2db-1 | 2026-10-12 08:14:09.877 UTC [68] FATAL: password authentication failed for user "app"Sources: PostgreSQL Docs: Authentication problems · PostgreSQL Docs: The pg_hba.conf file · Docker Official Image: postgres
Connection refused
LinuxThe address was reached but nothing listens on that port: the service is down or not started yet, or it listens on another port or address. Inside a container,
localhostand127.0.0.1are the container itself, not the host or another service.What to do: Use the other service's Compose name instead of
localhost, wait for it with ahealthcheck, and check the port it listens on.3app-1 | Error: connect ECONNREFUSED 127.0.0.1:5432Sources: Node.js: Common system errors · Docker Docs: Networking in Compose · Docker Docs: Control startup and shutdown order in Compose
Node.js: heap limit reached
Node.jsThe process used all the JavaScript heap V8 allows and aborted. The limit is set by Node.js, separately from the container's memory limit; a memory leak reaches it too.
What to do: Check whether memory grows over time (a leak). Set
--max-old-space-size(in MiB) below the container's memory limit, for example throughNODE_OPTIONS.6app-1 | FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memorySources: Node.js: --max-old-space-size · Docker Docs: Resource constraints, memory
nginx: the upstream refused the connection
nginxnginx reached the upstream's address but nothing listens on that port: the application is down, restarting, or listens on another port or only on
127.0.0.1inside its container. The visitor gets a 502.What to do: Check that the application is running (
docker compose ps), that it listens on0.0.0.0and on the port inproxy_pass, and test it from the proxy's container.7proxy-1 | 2026/10/12 08:15:01 [error] 29#29: *1 connect() failed (111: Connection refused) while connecting to upstream, client: •••.•••.•••.•••, server: example.com, request: "GET / HTTP/1.1", upstream: "http://•••.•••.•••.•••:3000/", host: "example.com"Sources: nginx: ngx_http_proxy_module · Docker Docs: Networking in Compose
Limits
- It recognizes known messages, not causes: one line can be the symptom of an error that a different program logged earlier. Read the lines around each match.
- Only the errors in the list are recognized; a message reworded by a new version may be missed until the list is updated. It is not a log analysis or monitoring system.
- Masking finds common formats of addresses and secrets and can miss others (a host name, a customer id, a secret in an unusual format). Read the masked log before you share it.
- Nothing is sent to an AI model or a server: the explanations are fixed texts, the same for everyone.
Methodology: how the numbers are worked out
Sources
- Docker Docs: Port publishing and mapping
- ss(8), Linux manual page
- Docker Docs: Linux post-installation steps (manage Docker as a non-root user)
- Docker Docs: Troubleshooting the Docker daemon
- Docker Docs: Multi-platform builds
- Dockerfile reference: CMD
- Dockerfile reference: ENTRYPOINT
- Docker Docs: docker image pull
- Docker Docs: docker login
- Docker Docs: dockerd, daemon configuration file
- Docker Docs: Prune unused Docker objects
- PostgreSQL Docs: Authentication problems
- PostgreSQL Docs: The pg_hba.conf file
- Docker Official Image: postgres
- PostgreSQL Docs: Database roles
- PostgreSQL Docs: Upgrading a PostgreSQL cluster
- PostgreSQL Docs: Connections and authentication (max_connections)
- PostgreSQL Docs: Starting the database server (client connection problems)
- Docker Docs: Control startup and shutdown order in Compose
- MySQL 8.4 Reference Manual: Troubleshooting problems connecting to MySQL
- Docker Official Image: mariadb
- MySQL 8.4 Reference Manual: Can't connect to [local] MySQL server
- MySQL 8.4 Reference Manual: Running multiple MySQL instances on one machine
- nginx: ngx_http_proxy_module
- Docker Docs: Networking in Compose
- nginx: ngx_http_upstream_module
- Caddy Docs: Command line (caddy validate, caddy adapt)
- Caddy Docs: The Caddyfile
- Let's Encrypt: Rate limits
- Let's Encrypt: Challenge types
- Let's Encrypt: Certificate Authority Authorization (CAA)
- Caddy Docs: Automatic HTTPS
- Certbot User Guide
- OpenSSL: openssl-s_client
- update-ca-certificates(8), Debian manual page
- Node.js: NODE_EXTRA_CA_CERTS
- Node.js: Modules, loading from node_modules folders
- npm Docs: npm ci
- Node.js: --max-old-space-size
- Docker Docs: Resource constraints, memory
- Python Docs: ModuleNotFoundError
- pip User Guide: Requirements files
- Gunicorn Docs: Settings, timeout
- Linux kernel: Control Group v2, memory
- df(1), Linux manual page
- errno(3), Linux manual page
- Node.js: Common system errors
- Node.js: DNS, implementation considerations
- resolv.conf(5), Linux manual page
- mount(8), Linux manual page
- Docker Docs: Bind mounts
- getrlimit(2), Linux manual page
- Docker Docs: docker container run, --ulimit
- nginx: Command-line parameters (nginx -t)
Related
Next step
Container keeps restarting: find the cause from its exit code
A free public tool by ANAROQ, a company building compute infrastructure. What ANAROQ is building