vix logs
vix logs shows production logs for a Vix application.
Use it when you want to inspect systemd app logs, Nginx proxy logs, error logs, repeated failures, or live production output.
vix logsOverview
vix logs is the production log inspection command for Vix.
It can show:
- systemd app logs
- Nginx access logs
- Nginx error logs
- app errors
- proxy errors
- repeated error groups
- common network disconnect groups
- live logs
- logs since a specific time
- the last N lines
- JSON output for repeated error analysis
It is useful when:
- the app fails to start
- health checks fail
- public traffic does not work
- Nginx proxy behaves incorrectly
- WebSocket clients disconnect
- production logs are too noisy
- deployment failed and you need recent errors
Platform support
vix logs is currently supported on:
LinuxIt uses Linux production tools such as:
journalctl
tail
grep
sudo2
3
4
On unsupported platforms, Vix reports that vix logs is currently supported on Linux only.
Usage
vix logs [target] [options]Targets
| Target | Purpose |
|---|---|
| no target | Show app logs and proxy logs. |
app | Show systemd app logs. |
proxy | Show Nginx access and error logs. |
errors | Show app errors and Nginx error logs. |
Basic examples
# Show app and proxy logs
vix logs
# Show only app logs
vix logs app
# Show only proxy logs
vix logs proxy
# Show app errors and proxy error logs
vix logs errors
# Follow logs live
vix logs --follow
# Alias for --follow
vix logs -f
# Show only common error lines
vix logs --errors
# Analyze repeated errors
vix logs errors --repeated
# Analyze repeated errors as JSON
vix logs errors --repeated --json
# Show logs since a systemd time expression
vix logs --since "1 hour ago"
# Show last 200 lines
vix logs -n 200
# Same as -n
vix logs --lines 2002
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Configuration source
vix logs reads configuration from:
vix.jsonunder:
production.logsIt can also reuse service names from:
production.deploy.service
production.service.name2
Full config example
{
"name": "PulseGrid",
"production": {
"service": {
"name": "pulsegrid"
},
"deploy": {
"service": "pulsegrid"
},
"logs": {
"service": "pulsegrid",
"nginx_access": "/var/log/nginx/pulsegrid.access.log",
"nginx_error": "/var/log/nginx/pulsegrid.error.log",
"lines": 120
}
}
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Logs config fields
| Field | Purpose |
|---|---|
production.logs.service | systemd service name used for app logs. |
production.logs.nginx_access | Nginx access log path. |
production.logs.nginx_error | Nginx error log path. |
production.logs.lines | Default number of lines to show. |
Service name detection
Vix resolves the service name in this order:
production.logs.service
production.deploy.service
production.service.name
project name2
3
4
If the service name ends with:
.serviceVix normalizes it internally and uses the service name for journalctl.
Example:
{
"production": {
"logs": {
"service": "pulsegrid.service"
}
}
}2
3
4
5
6
7
is treated as:
pulsegridDefault log paths
If no custom Nginx log paths are configured, Vix uses default paths based on the app name.
For an app named:
PulseGridthe default paths are:
/var/log/nginx/PulseGrid.access.log
/var/log/nginx/PulseGrid.error.log2
You can override them:
{
"production": {
"logs": {
"nginx_access": "/var/log/nginx/pulsegrid.access.log",
"nginx_error": "/var/log/nginx/pulsegrid.error.log"
}
}
}2
3
4
5
6
7
8
Show all logs
Run:
vix logsThis shows:
app logs
proxy access logs
proxy error logs2
3
It prints a summary first:
Logs
App: PulseGrid
Target: all
Service: pulsegrid
Nginx access: /var/log/nginx/pulsegrid.access.log
Nginx error: /var/log/nginx/pulsegrid.error.log
Lines: 120
Follow: no
Errors only: no2
3
4
5
6
7
8
9
Then it runs the needed system commands.
Show app logs
Run:
vix logs appThis uses:
journalctl -u <service> -n <lines> --no-pagerExample:
journalctl -u pulsegrid -n 120 --no-pagerUse this when the app:
- fails to start
- exits unexpectedly
- crashes
- logs runtime errors
- cannot bind a port
- cannot open a file
- cannot connect to a database
Show proxy logs
Run:
vix logs proxyThis shows:
Nginx access log
Nginx error log2
It uses commands shaped like:
sudo tail -n 120 /var/log/nginx/pulsegrid.access.log
sudo tail -n 120 /var/log/nginx/pulsegrid.error.log2
Use this when:
- public traffic does not reach the app
- Nginx returns 502 or 504
- TLS works but upstream fails
- WebSocket proxying fails
- proxy headers or upstream ports are wrong
Show error logs
Run:
vix logs errorsThis shows:
filtered app errors
Nginx error log2
It filters app logs using common error keywords such as:
error
failed
failure
exception
panic
fatal
critical
timeout
refused
denied2
3
4
5
6
7
8
9
10
Use this when you want to focus on failures instead of normal traffic.
Error filtering
You can filter logs by common error keywords with:
vix logs --errorsThis applies to app logs and proxy logs where supported.
Example:
vix logs app --errors
vix logs proxy --errors
vix logs --errors2
3
The filter looks for common failure words such as:
error
failed
failure
exception
panic
fatal
critical
timeout
refused
denied2
3
4
5
6
7
8
9
10
Follow logs live
Use --follow or -f:
vix logs --follow
vix logs -f
vix logs app -f
vix logs proxy -f2
3
4
For app logs, this maps to:
journalctl -u <service> -fFor proxy logs, this maps to:
sudo tail -f <log-file>Use follow mode when you want to watch logs while:
- restarting a service
- testing a route
- hitting the public URL
- connecting a WebSocket client
- running a deployment
Show logs since a time
Use --since:
vix logs --since "1 hour ago"
vix logs app --since "today"
vix logs errors --since "10 minutes ago"2
3
--since is passed to journalctl for app logs.
Examples of valid systemd time expressions:
1 hour ago
10 minutes ago
today
yesterday
2026-05-28 10:00:002
3
4
5
Show last N lines
Use --lines or -n:
vix logs --lines 200
vix logs -n 200
vix logs app -n 50
vix logs proxy -n 3002
3
4
If not configured, the default is usually:
120You can also set the default in vix.json:
{
"production": {
"logs": {
"lines": 200
}
}
}2
3
4
5
6
7
Repeated error analysis
Use --repeated to analyze repeated failures:
vix logs errors --repeatedThis reads app and proxy error-like lines, normalizes them, groups repeated messages, and reports common patterns.
Example output shape:
Repeated Errors
Analyzed lines: 120
Repeated groups: 2
12x upstream timed out
5x connection refused
Common Network Disconnects
Detected groups: 3
Hidden normal noise: 18 lines
14x client disconnected
3x connection reset by peer
1x timeout2
3
4
5
6
7
8
9
10
11
12
This is useful when production logs are noisy and you want to know which problems repeat the most.
Repeated error JSON
Use:
vix logs errors --repeated --jsonExample output shape:
{
"analyzed_lines": 120,
"repeated_groups": 2,
"network_disconnect_groups": 3,
"hidden_normal_noise_lines": 18,
"repeated_errors": [
{
"message": "upstream timed out",
"count": 12
}
],
"network_disconnects": [
{
"name": "client disconnected",
"count": 14
}
]
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Use JSON output for:
- CI
- dashboards
- automation
- production monitoring experiments
- deployment reports
Normal network disconnect noise
Production logs often contain normal disconnects.
Examples:
broken pipe
connection reset by peer
client closed connection
client prematurely closed connection
websocket disconnected
EOF2
3
4
5
6
These do not always mean your app is broken.
They often mean the client closed the connection.
vix logs errors --repeated groups this noise separately so it does not hide real repeated failures.
Normal network noise groups include:
client disconnected
connection reset by peer
websocket disconnected2
3
The report can show:
Hidden normal noise: 18 linesThis helps production logs stay useful.
Network disconnect groups
The repeated error analyzer can group common network failures such as:
| Group | Meaning |
|---|---|
client disconnected | Client closed the connection, broken pipe, EOF, or similar. |
connection reset by peer | Remote side reset the connection. |
websocket disconnected | WebSocket client disconnected. |
upstream disconnected | Upstream closed the connection early. |
connection refused | Upstream or target refused the connection. |
timeout | A request or upstream timed out. |
The goal is to separate normal production noise from real repeated failures.
Commands printed before execution
vix logs prints the command it is about to run.
Example:
Command: journalctl -u pulsegrid -n 120 --no-pagerThis makes log inspection transparent.
If you need to debug manually, you can copy the command and run it yourself.
Target behavior
No target
vix logsRuns:
app logs
proxy access logs
proxy error logs2
3
app
vix logs appRuns:
systemd app logsproxy
vix logs proxyRuns:
Nginx access logs
Nginx error logs2
errors
vix logs errorsRuns:
filtered app errors
Nginx error logs2
It also enables error filtering internally.
Full production logs config
{
"name": "PulseGrid",
"production": {
"service": {
"name": "pulsegrid"
},
"proxy": {
"domain": "pulsegrid.example.com",
"http": {
"port": 8080
}
},
"logs": {
"service": "pulsegrid",
"nginx_access": "/var/log/nginx/pulsegrid.access.log",
"nginx_error": "/var/log/nginx/pulsegrid.error.log",
"lines": 120
}
}
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Then run:
vix logs
vix logs app
vix logs proxy
vix logs errors
vix logs errors --repeated2
3
4
5
Relationship with vix service
vix service manages the app service.
vix logs app reads logs for that service.
Typical flow:
vix service status
vix logs app2
After a restart:
vix service restart
vix logs app -f2
Relationship with vix proxy nginx
vix proxy nginx manages Nginx config.
vix logs proxy reads Nginx access and error logs.
Typical flow:
vix proxy nginx check
vix logs proxy2
If the public endpoint fails:
vix proxy nginx check
vix logs proxy --errors2
Relationship with vix health
vix health tells you whether an endpoint is healthy.
vix logs tells you why it may be unhealthy.
Typical flow:
vix health
vix logs errors
vix logs errors --repeated2
3
Relationship with vix doctor production
vix doctor production gives a readiness overview.
vix logs gives detailed runtime evidence.
Typical flow:
vix doctor production
vix logs errors2
Relationship with vix deploy
A deployment command can show logs on failure.
Manual flow:
vix deploy
vix health
vix logs errors2
3
If repeated failures appear:
vix logs errors --repeatedOptions
| Option | Description |
|---|---|
app | Show systemd app logs. |
proxy | Show Nginx access and error logs. |
errors | Show app errors and Nginx error logs. |
--follow | Follow logs live. |
-f | Alias for --follow. |
--errors | Filter logs by common error keywords. |
--repeated | Detect repeated errors and common network disconnect groups. |
--json | Print supported output as JSON. Currently useful with --repeated. |
--since <time> | Filter app logs by a systemd time expression. |
--lines <n> | Show last N lines. |
-n <n> | Alias for --lines. |
-h, --help | Show help. |
Common workflows
Inspect everything
vix logsInspect app logs
vix logs appInspect proxy logs
vix logs proxyInspect only errors
vix logs errorsFollow app logs while restarting
vix service restart
vix logs app -f2
Follow proxy logs while testing public URL
vix logs proxy -fShow recent errors
vix logs errors -n 200Show errors from the last hour
vix logs errors --since "1 hour ago"Analyze repeated errors
vix logs errors --repeatedAnalyze repeated errors as JSON
vix logs errors --repeated --jsonCommon mistakes
Running outside the project directory
Wrong:
cd ~
vix logs2
Correct:
cd /path/to/myapp
vix logs2
vix logs reads vix.json from the current project directory.
Expecting logs to start the service
vix logs only reads logs.
Start the service with:
vix service startExpecting logs to fix health failures
vix logs helps you inspect failures.
Use the right command to fix the source of the issue.
Examples:
vix service restart
vix proxy nginx check
vix health local
vix health public2
3
4
Using --json without --repeated
JSON output is currently useful for repeated error analysis.
Use:
vix logs errors --repeated --jsonExpecting --since to filter Nginx log files
--since is passed to journalctl for app logs.
Nginx log files are read with tail.
Forgetting sudo permissions for Nginx logs
Proxy logs are usually under:
/var/log/nginx/Vix reads them using sudo tail.
Make sure your user can use sudo.
Missing Nginx log files
If Vix reports that a log file is missing, check:
{
"production": {
"logs": {
"nginx_access": "/var/log/nginx/pulsegrid.access.log",
"nginx_error": "/var/log/nginx/pulsegrid.error.log"
}
}
}2
3
4
5
6
7
8
or configure Nginx to write logs at those paths.
Troubleshooting
Missing service name
If app logs cannot be read, configure:
{
"production": {
"logs": {
"service": "pulsegrid"
}
}
}2
3
4
5
6
7
You can also define:
{
"production": {
"service": {
"name": "pulsegrid"
}
}
}2
3
4
5
6
7
App logs are empty
Check service status:
vix service statusThen inspect directly:
journalctl -u pulsegrid -n 120 --no-pagerProxy access log not found
Check the configured path:
{
"production": {
"logs": {
"nginx_access": "/var/log/nginx/pulsegrid.access.log"
}
}
}2
3
4
5
6
7
Then check Nginx config:
vix proxy nginx checkProxy error log not found
Check:
{
"production": {
"logs": {
"nginx_error": "/var/log/nginx/pulsegrid.error.log"
}
}
}2
3
4
5
6
7
Then inspect Nginx:
sudo nginx -tPublic URL fails
Run:
vix health public
vix proxy nginx check
vix logs proxy --errors2
3
Local app fails
Run:
vix health local
vix service status
vix logs app --errors2
3
WebSocket fails
Run:
vix health websocket
vix proxy nginx check
vix logs errors --repeated2
3
Too many disconnect messages
Run:
vix logs errors --repeatedNormal disconnects are grouped separately so you can focus on actual repeated failures.
Best practices
Keep log configuration in vix.json.
Use vix logs app for app crashes and service startup errors.
Use vix logs proxy for Nginx and public traffic issues.
Use vix logs errors when you want failure-focused logs.
Use vix logs errors --repeated when logs are noisy.
Use vix logs app -f while restarting the service.
Use vix logs proxy -f while testing the public URL.
Use vix health before logs to know which layer is failing.
Use vix doctor production after logs to confirm readiness.
Related commands
| Command | Purpose |
|---|---|
vix service | Manage the systemd app service. |
vix proxy nginx | Manage Nginx reverse proxy configuration. |
vix health | Check local, public, and WebSocket endpoints. |
vix doctor production | Inspect production readiness. |
vix deploy | Deploy the production app. |
vix build | Build the app binary. |
vix run | Run the app manually. |
Next step
Check endpoint health.