Files
RustProxy/docs/ERROR_LOGGING.md
T
2026-10-09 17:09:41 +02:00

3.4 KiB

Error and warning logging

RustProxy routes diagnostics according to the Error file switch under Settings > Logging. When the file is enabled, ERROR and WARN events, including PHP-FPM stderr and Rust worker panics, go to the configured error file rather than also being printed to the systemd journal. When the file is disabled (the default), those events go to the console/stderr (journald under systemd). INFO and lower-severity messages continue to use the console and any independently configured access sinks are unaffected.

Configuration

The settings document contains:

{
  "error_log": {
    "enabled": true,
    "path": "/var/log/rustproxy/error.log",
    "format": "JSON"
  }
}

format is JSON or RAW. The feature is disabled by default. The administration Settings UI exposes the same enable/path/format controls and applies changes at runtime, without restarting RustProxy.

The sink accepts WARN and ERROR events. JSON is one object per line (including its actual level); RAW is one human-readable line per event.

Runtime behavior

Events are handed to a bounded queue and written by one asynchronous worker. The normal request path does not perform file I/O. When the queue is full or closed, the event is counted as dropped by the file sink but immediately written to the console as a redacted emergency fallback; memory usage stays bounded.

Filesystem errors do not stop RustProxy. The worker writes the affected diagnostics to stderr, rate-limits sink-failure messages, and retries opening the file. If the switch is disabled while events remain queued, they are sent to stderr rather than silently discarded. Changing the path or disabling the sink closes the current file; a format change takes effect without a restart.

RustProxy installs a panic hook after initializing tracing so worker panics are recorded as ERROR events including thread, source location and panic payload. It intentionally does not install the default Rust hook in parallel, which would duplicate the message on stderr. It cannot capture forced termination (SIGKILL, abort) or messages written directly to stderr by external processes.

Created log files use mode 0600 on POSIX. Symlink/non-regular targets are refused.

Secret redaction

The common logging pipeline redacts sensitive keys and values before they reach the error-file sink. This includes authorization credentials, provider tokens/passwords, backup passwords, private-key PEM material and Secret Store/master-key related values. Structured secret fields are replaced with [REDACTED].

Error messages from dependencies should still be treated as untrusted diagnostic input; do not deliberately embed secrets in error text.

Rotation

RustProxy does not implement file rollover, retention or compression. Use the system logrotate. Debian packaging is maintained outside this source tree and ready packages are published at https://rustproxy.linuxiarz.pl; package-specific logrotate policy belongs to that packaging repository.

Stored-log explorer

The authenticated /logs workspace can read the configured error file alongside structured access/protocol files. It remains independent from Live Logs and can inspect an existing error file even while error_log.enabled is false. The browser API does not accept arbitrary paths; it resolves only the configured error-log path and applies the same bounded, read-only regular-file/symlink protections documented in FILE_LOGS.