XTLS/Xray-core · warning · errors.Error

failed to initialize error logger

Error message

failed to initialize error logger

What it means

Companion to error 36: initErrorLogger failed during log.Instance startup, wrapped with AtWarning so the instance still runs with error logging disabled. The chained Base error carries the actual writer creation failure.

Source

Thrown at app/log/log.go:95

func (*Instance) Type() interface{} {
	return (*Instance)(nil)
}

func (g *Instance) startInternal() error {
	g.Lock()
	defer g.Unlock()

	if g.active {
		return nil
	}

	g.active = true

	if err := g.initAccessLogger(); err != nil {
		return errors.New("failed to initialize access logger").Base(err).AtWarning()
	}
	if err := g.initErrorLogger(); err != nil {
		return errors.New("failed to initialize error logger").Base(err).AtWarning()
	}

	return nil
}

// Start implements common.Runnable.Start().
func (g *Instance) Start() error {
	return g.startInternal()
}

// Handle implements log.Handler.
func (g *Instance) Handle(msg log.Message) {
	g.RLock()
	defer g.RUnlock()

	if !g.active {
		return
	}

View on GitHub (pinned to 7d214f8b09)

Solutions

  1. Inspect the Base error for the exact file operation failure
  2. Create/chown the log directory so the xray user can write
  3. Use a writable path or /dev/null for the error log if file logging is unwanted
Defensive patterns

Strategy: validation

Validate before calling

if p := cfg.Log.Error; p != "" && p != "none" {
    if err := os.MkdirAll(filepath.Dir(p), 0o755); err != nil { return err }
    if f, err := os.OpenFile(p, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0o644); err != nil {
        return fmt.Errorf("error log not writable: %w", err)
    } else { f.Close() }
}

Prevention

When it happens

Trigger: The error log path in config cannot be created/opened (bad directory, permissions, invalid path), or the error-log handler failed to initialize.

Common situations: Same file-path class of problems as the access logger: unwritable /var/log in containers, wrong ownership, directory in place of file, read-only rootfs in k8s pods.

Related errors


AI-assisted analysis of XTLS/Xray-core@7d214f8b09 (2026-08-15). Data as JSON: /api/errors/f44719ef5ac3b6f6. Report an issue: GitHub.