V2Ray Logs Explained: Common Errors and How to Troubleshoot

Learn how to set loglevel and find log files. Understand errors like connection refused, i/o timeout, and invalid user, with steps to pinpoint each cause.

At a glance

Capture the logs around a failed request, then troubleshoot in order: local listener, DNS resolution, remote connection, and authentication. This guide covers startup failures, connection timeouts, and pages that won't load, with pointers to the logs in v2rayN and v2rayNG, V2Ray/Xray log levels, and what to check next for each error.

Reproduce the failure, then find the matching logs

Note when the issue occurs. Pause downloads and background updates, then open just one page to test. Log entries for different connections can interleave; without a timestamp and destination to refer to, it's easy to mistake a background failure for the page you're testing. Don't capture only the last line—keeping about 10–20 lines before and after the error usually makes the sequence clearer.

  1. v2rayN desktop: Start with the runtime information or log area in the main window, and distinguish client startup messages from core output. To increase detail, open Settings → Parameter Settings and look for core or logging options. Names and groups vary by version; check the interface for “log level” or the loglevel field.
  2. v2rayNG for Android: Open Logs from the main screen menu, start the service, then reproduce the issue. If your version has a log-level option in Settings, raise it temporarily and restart the service. Don't mistake Android's VPN permission prompt for a core error.
  3. Custom V2Ray/Xray config: Check the log section in the config actually used at startup. error points to the error log file, and access to the access log file. If no file is specified, output location depends on how the core is launched and how the client handles console output.
  4. Can't find the log file? First check whether file logging is configured. A desktop client's executable, working, and config directories may be different, so don't assume logs are always in the install directory. Resolve relative paths against the actual working directory.

Set loglevel: start with info, use debug briefly if needed

loglevel controls how much detail the logs include. Start with info, save, restart the core, and reproduce the issue. Use debug briefly only if you need more detail. Log level is not a network mode: increasing it won't fix a connection or make the proxy handle more apps.

LevelWhen to useWhat to look for
debugBriefly investigating a complex issueDetailed context; available detail depends on the core and version.
infoGeneral connection troubleshootingStartup, connection, and routing information.
warningMonitoring for issues during normal useWarnings and more serious issues; fewer routine connection details.
errorViewing errors onlyYou may not see the full sequence of a request entering the core.
noneDisable this type of log outputNot suitable while reproducing an issue.

The snippets below can be added to an existing top-level config; they are not a complete proxy config. They omit file paths to avoid introducing directory-permission issues during the first round of troubleshooting. If a client generates the config, change it through the interface when possible—direct edits may be overwritten on the next launch.

{
  "log": {
    "loglevel": "info"
  }
}

Understand the error chain: find where the connection stops

The core is the program that actually handles proxy traffic. Inbound accepts requests from local apps; outbound sends them to a direct destination or proxy server. First check whether the request reached inbound, then inspect outbound routing and the network handshake. This is more effective than changing settings one by one.

App request Local inbound Route selection Remote connection Protocol handshake

An error line often chains several causes together: the outer message might say “failed to process outbound traffic,” while the underlying cause is connection refused or i/o timeout. Read the most specific cause first, then check which address it was connecting to. The destination in the log might be a proxy server, a directly accessed site, or a DNS server—not necessarily a problem with your node.

10808
Example local SOCKS port used below; verify yours before running commands
443
A common port for HTTPS destinations, not a fixed port for nodes
53
A common port for traditional DNS, not used by every resolution method

These numbers are just clues for identifying connection roles, not settings you should change across the board. Use the client settings for the actual listening port and the server-provided details for the remote port. Seeing 443 in a log alone doesn't tell you whether that connection went through the proxy.

Connection errors: refused, timed out, or no available destination

Error: connection refused

Cause: The connection was explicitly rejected. This commonly means nothing is listening on the destination port, or a firewall actively blocked it.

Fix: Check the destination address first. If it's 127.0.0.1:10808, check that the local core is running and listening on that port. For a remote address, verify the node port and whether the server is listening.

Error: i/o timeout

Cause: A network read or write didn't complete before its deadline. This can happen while connecting, during the TLS handshake, or while waiting for a response.

Fix: Use the surrounding log messages to identify where the timeout occurred. Test the same node over Wi-Fi and mobile data for comparison; don't assume every timeout is a DNS issue.

Error: failed to find an available destination

Cause: No usable connection was established after attempts to reach the current destination. This is usually a summary error and doesn't identify the root cause on its own.

Fix: Look earlier in the same error chain for a resolution failure, refused connection, or timeout. Then check the domain, port, and network path separately.

Error: no such host

Cause: The resolver couldn't find a valid address for the domain. The address may also be misspelled, or the DNS request may have taken the wrong route.

Fix: First check whether the domain in the log belongs to the node or the destination site. Then check which DNS server is actually being used and review the routing rules.

On Windows, v2rayN users can first check whether the example local port is listening. The command below only queries TCP status; it doesn't change system settings. No results don't prove the remote node is down. Check the client's startup logs first, and confirm the port really is 10808.

Get-NetTCPConnection -State Listen -LocalPort 10808

If you've confirmed that the port offers a SOCKS proxy, run an explicit proxy request. socks5h sends the destination domain to the proxy for resolution. The 15-second limit here is set manually for this test; it is not the core's default timeout.

curl.exe --proxy socks5h://127.0.0.1:10808 --connect-timeout 15 --max-time 30 -I https://example.com/

Authentication and TLS errors: check the config; don't bypass verification

A successful TCP connection only shows that the port is reachable; it doesn't mean proxy protocol authentication succeeded. A UUID identifies a user in some proxy protocols. TLS verifies the server's identity and encrypts traffic. Troubleshoot these separately—changing the log level or local port usually won't fix either one.

Error: invalid user

Cause: User authentication failed. This message often appears in server logs and may indicate mismatched credentials, a removed user, or inconsistent protocol settings.

Fix: Compare the user ID and protocol settings on the client and server. For VMess, also check the system clock. If needed, ask the server administrator to compare logs from the same time.

Error: x509: certificate has expired or is not yet valid

Cause: The certificate's validity period doesn't match the system time. The certificate may have expired, or the device date may be wrong.

Fix: Turn on automatic date and time on the device, then ask the server administrator to check the certificate's validity and deployment.

Error: x509: certificate signed by unknown authority

Cause: The current environment can't build a trusted certificate chain. Possible causes include a missing intermediate certificate, a self-signed certificate, or certificate replacement somewhere on the network.

Fix: Check the server's full certificate chain and the system's trust store. Confirm the expected certificate with the administrator; don't disable verification as a permanent fix.

Error: EOF

Cause: The connection closed before the read completed. On its own, this doesn't prove authentication failed.

Fix: Check the surrounding logs for TLS, transport, and server response details. If this is the only line on the client, ask the administrator for the corresponding server-side log.

  1. Update the subscription, then select the config you want to use. Updating a subscription refreshes the list but may not switch the active connection automatically.
  2. Check the server address, port, protocol, user ID, transport, and TLS setting one by one. For WebSocket, also check the path and Host. Don't copy these fields over to other transport types.
  3. Check SNI, the server name sent during the TLS handshake. It may not match the IP address used for the connection; follow the server's config requirements.
  4. For REALITY, verify the public key, short ID, and server name against the server's requirements. The fixes for regular certificate errors don't apply.

Startup failures: check port conflicts and config parsing first

If the service exits immediately after starting, troubleshoot the startup logs before testing a web page. If the core never starts listening, a proxy connection failure in the browser is just a downstream symptom. Switching nodes won't fix invalid local config syntax or a conflict on the listening address.

Error: address already in use

Cause: Another process is using the listening address and port, or the core was started more than once.

Fix: Find the process using the port and exit any duplicate instances normally. If you change the local listening port, update the settings of any apps that use it.

Error: failed to load config files

Cause: The config failed to load. The path may be unreadable, the JSON may be invalid, or the current core may not support a field.

Fix: Check the following messages for the file name, field name, and line or column details. Restore the last working config and confirm it's compatible with the core.

On Windows, use the earlier port query command to find OwningProcess, then run the command below to identify the process. Once you know what it is, close the relevant app normally. Don't force-quit an unknown system process just because it is using the port.

Get-NetTCPConnection -State Listen -LocalPort 10808 |
  Select-Object LocalAddress, LocalPort, OwningProcess

Get-Process -Name *v2ray*, *xray* -ErrorAction SilentlyContinue

Common questions: warnings, missing logs, and successful speed tests

There are warnings in the logs, but pages load. Do I need to change the config?

First check the warning's time and destination. A background app canceling a request or a failed direct connection may have nothing to do with the page you're using. Act only on errors that reliably reproduce and affect you. Compare the surrounding logs; warning counts don't indicate node quality.

I set the level to info, but no new entries appear when I visit a page. Why?

First confirm the core is running, then test the verified local port with an explicit proxy command. If that request appears in the logs but the browser request doesn't, check the browser or system proxy settings. In v2rayNG, check the VPN service status and whether per-app proxy settings exclude the app.

Why do connections still time out when the latency test succeeds?

First check what kind of speed test it was. A TCP latency test verifies only part of the connection process; it doesn't guarantee authentication, TLS, or access to the destination. Make a real web request through the same node, then use the logs to see whether it stalls while connecting to the remote host or later in the handshake. Don't rule out a node config issue based on latency alone.

Should I send the full subscription and logs to the administrator?

First remove subscription links, user IDs, tokens, passwords, and personal addresses. Include only the original error text, timestamp, and necessary context. Label the roles of “local address,” “node address,” and “destination address.” Delete sensitive values and note that they've been redacted; don't send screenshots of the full config.

Summarize your troubleshooting: make the next test conclusive

After a round of troubleshooting, test again with the same node, destination, and network. One successful attempt only proves that request worked at that moment. If the issue is intermittent, keep testing under the original conditions. When reporting back, describe what you did and what happened—that's more useful than “still not working.”

Finally, restore your usual log level and keep a copy of the working config. For refused connections, check the listener and port; for timeouts, identify where they occur; for authentication errors, check credentials and protocol; for certificate errors, check the clock and trust chain. Troubleshoot layer by layer to avoid repeatedly changing unrelated settings.

Download the client