Tarantool CE/EE Documentation portal logo
Помощь
Обновлена 15 сентября 2026 г. в 08:55

Модуль log

Общие сведения

В Tarantool предусмотрен набор параметров для настройки журналирования различными способами: можно задать уровень детализации журнала, указать место вывода, настроить формат журнала и так далее. Модуль log позволяет настраивать журналирование в приложении и предоставляет дополнительные возможности, например, запись пользовательских сообщений и ротацию файлов журнала.

Указатель

Ниже приведен перечень всех функций и элементов модуля log.

Имя

Назначение

log.cfg({})

Настройка средства журналирования

log.error()
log.warn()
log.info()
log.verbose()
log.debug()

Запись сообщения с указанным уровнем

log.pid()

Получение PID средства журналирования

log.rotate()

Ротация файла журнала

log.new()

Создание нового средства журналирования с заданным именем

log.cfg({})

Настройка параметров журналирования. Доступны следующие параметры:

  • level: задает уровень детализации журнала.

    В примере ниже показано, как задать значение verbose для уровня журнала:

    См. также: log.level.

  • log: указывает, куда направлять вывод журнала, например, в файл, канал или системный журнал.

    Пример 1: направление журнала в файл tarantool.log

    log.cfg { log = 'tarantool.log' }

    Пример 2: направление журнала в канал

    log.cfg { log = '| cronolog tarantool.log' }

    Пример 3: направление журнала в syslog

    log.cfg { log = 'syslog:server=unix:/dev/log' }

    См. также: log.to.

  • nonblock: если true, Tarantool не блокирует выполнение при журналировании, когда система не готова к записи, и сообщение отбрасывается.

    См. также: log.nonblock.

  • format: задает формат журнала: 'plain' или 'json'.

    См. также: log.format.

  • modules: задает уровни журналирования для отдельных модулей.

    См. также: log.modules.

log.error(message)

log.warn(message)

log.info(message)

log.verbose(message)

log.debug(message)

Записывает сообщение с указанным уровнем журналирования. Подробнее о доступных уровнях см. в описании параметра log.level.

Пример:

В примере ниже показано, как записать сообщение с уровнем warn:

log.warn('Warning message')        log.info('Tarantool version: %s', box.info.version)        log.error({ 500, 'Internal error' })        log.debug('Debug message')    end)end)g.after_each(function(cg)    cg.server:drop()    fio.rmtree(cg.server.workdir)end)local function find_in_log(cg, str, must_be_present)    t.helpers.retrying({ timeout = 0.3, delay = 0.1 }, function()        local found = cg.server:grep_log(str) ~= nil        t.assert(found == must_be_present)    end)endg.test_log_contains_messages = function(cg)    find_in_log(cg, 'Warning message', true)    find_in_log(cg, 'Tarantool version:', true)    find_in_log(cg, 'Internal error', true)    find_in_log(cg, 'Debug message', false)end

Параметры:

  • message (any) — сообщение журнала.

  • Сообщение может быть строкой.

  • Сообщение может содержать спецификаторы формата в стиле C — %d или %s. Пример:

    local log = require('log')log.cfg { level = 'verbose' }
    log.warn('Warning message')        log.info('Tarantool version: %s', box.info.version)        log.error({ 500, 'Internal error' })        log.debug('Debug message')    end)end)g.after_each(function(cg)    cg.server:drop()    fio.rmtree(cg.server.workdir)end)local function find_in_log(cg, str, must_be_present)    t.helpers.retrying({ timeout = 0.3, delay = 0.1 }, function()        local found = cg.server:grep_log(str) ~= nil        t.assert(found == must_be_present)    end)endg.test_log_contains_messages = function(cg)    find_in_log(cg, 'Warning message', true)    find_in_log(cg, 'Tarantool version:', true)    find_in_log(cg, 'Internal error', true)    find_in_log(cg, 'Debug message', false)end
  • Сообщение может быть скалярным типом данных или таблицей. Пример:

    local log = require('log')log.cfg { level = 'verbose' }
    log.warn('Warning message')        log.info('Tarantool version: %s', box.info.version)        log.error({ 500, 'Internal error' })        log.debug('Debug message')    end)end)g.after_each(function(cg)    cg.server:drop()    fio.rmtree(cg.server.workdir)end)local function find_in_log(cg, str, must_be_present)    t.helpers.retrying({ timeout = 0.3, delay = 0.1 }, function()        local found = cg.server:grep_log(str) ~= nil        t.assert(found == must_be_present)    end)endg.test_log_contains_messages = function(cg)    find_in_log(cg, 'Warning message', true)    find_in_log(cg, 'Tarantool version:', true)    find_in_log(cg, 'Internal error', true)    find_in_log(cg, 'Debug message', false)end

Возвращает

nil

Выходное значение будет представлять собой строку в журнале, которая содержит следующее:

  • текущую временную метку
  • имя модуля
  • 'E', 'W', 'I', 'V' или 'D' в зависимости от вызванной функции
  • message

Обратите внимание, что сообщение не будет записано в журнал, если уровень важности, соответствующий вызванной функции, ниже log.level.

log.pid()

Возвращает

PID средства журналирования. Этот PID можно использовать для отправки сигнала программе ротации журналов, чтобы выполнить ротацию.

log.rotate()

Ротация журнала.

Например, эту функцию нужно вызывать, чтобы продолжить ведение журнала после того, как программа ротации переименует или переместит файл с последними записями журнала.

Возвращает

nil

log.new(name)

Начиная с: 2.11.0

Создает новое средство журналирования с указанным именем. Для нового средства журналирования можно задать отдельный уровень журналирования с помощью параметра log.modules.

Параметры:

  • name (string) — имя средства журналирования

Возвращает

экземпляр средства журналирования

Пример:

В этом примере показано, как задать уровень verbose для module1 и уровень error для module2 в конфигурационном файле:

log:  modules:    module1: 'verbose'    module2: 'error'app:  file: 'app.lua'

Чтобы создать средства журналирования module1 и module2 в приложении (app.lua), вызовите функцию new():

Затем можно вызывать функции, соответствующие разным уровням журналирования, чтобы убедиться, что события с уровнем важности выше или равным заданному отображаются:

При этом события с уровнем важности ниже заданного отбрасываются.

Пример на GitHub: log_new_modules.