Skip to content

Журнал

Блок log настраивает два потока журналов Xray (access и error), а также, по желанию, журналирование DNS-запросов и маскирование IP.

Параметры

ПолеТипПо умолчаниюДопустимые значенияОписание
accessstringconsole<file path> | noneКуда писать журнал доступа. Пустое значение (или его отсутствие) — вывод в консоль; "none" отключает журнал доступа; любое другое значение трактуется как путь к файлу.
errorstringconsole<file path> | noneКуда писать журнал ошибок. Семантика та же, что у access: пусто = консоль, "none" = выключено, всё остальное = путь к файлу.
loglevelstringwarningdebug | info | warning | error | noneМинимальный уровень серьёзности для журнала ошибок. Значение "none" дополнительно принудительно отключает журнал доступа.
dnsLogboolfalsetrue | falseЕсли true, каждый DNS-запрос, который разрешает движок маршрутизации, записывается в журнал доступа.
maskAddressstring(off)full | half | quarter | /v4mask+/v6maskМаскирование IP-адресов клиента и назначения в журнале. "full" = /0+/0, "half" = /16+/32, "quarter" = /8+/16. Можно также задать явную пару вида "/16+/64".

Исходный код: infra/conf/log.go:18-24 · зафиксировано на v26.7.28 (5ca6f4b)

Примеры

Вывод в консоль на уровне warning (по умолчанию):

json
{
  "log": {
    "loglevel": "warning"
  }
}

Записать оба потока в файлы, журналировать каждый DNS-запрос и маскировать IP до /16+/32:

json
{
  "log": {
    "access": "/var/log/xray/access.log",
    "error": "/var/log/xray/error.log",
    "loglevel": "info",
    "dnsLog": true,
    "maskAddress": "half"
  }
}

Полностью отключить журналирование:

json
{
  "log": {
    "loglevel": "none"
  }
}

Примечания

  • Поля access и error используют одну и ту же логику «none / пусто / путь» в LogConfig.Build (infra/conf/log.go:36-47); значение "none" — документированный выключатель, а любая другая непустая строка трактуется как путь к файлу, а не как ключевое слово уровня.
  • loglevel: "none" — особый случай: он не только заглушает поток ошибок, но и принудительно отключает оба потока (infra/conf/log.go:57-59).
  • maskAddress не проверяется по перечислению на этапе разбора конфигурации. Неизвестные значения попадают в парсер пользовательских пар масок в app/log/log.go:177-193; ошибка разбора там всплывает как отказ при запуске.

Исходный код: infra/conf/log.go:18-24 · v26.7.28 (5ca6f4b)

Core Tutorial от Argsment