Rails сохраняет данные журнала в базу данных - PullRequest
0 голосов
/ 31 октября 2018

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

У меня есть несколько приложений, запущенных в док-контейнерах, и я хочу сохранить записи журнала каждого из них в общую базу данных телеметрии, запущенную на сервере. В настоящее время журналы отформатированы с помощью lograge, но я не выяснил, как получить прямой доступ к этой информации и отправить ее в фоновое задание для обработки. через фоновое задание)

Мне известна команда Rails.logger.instance_variable_get (: @ logger) однако мне нужны реальные данные, сохраняемые в журналах, чтобы я мог отправить их в базу данных.

Причина этого заключается в том, что в докер-контейнерах работает несколько рельсовых API-интерфейсов. У меня есть задание, настроенное для выполнения фонового задания, которое, как я надеялся, отправило бы только отдельную запись в журнал, но это то, где я застрял. Определение размера не является проблемой, поскольку данные, хранящиеся в этой базе данных, необходимо очищать каждые 2 недели. Это также инструмент для внутренних разработчиков для отслеживания телеметрии через панель инструментов. Я ценю, что вы нашли время ответить

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Так что я получил решение, работающее, и, честно говоря, это было не так сложно, как я думал. Поскольку я использовал гем lograge для форматирования журналов, я создал пользовательский форматер с помощью руководства в этой Link .

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

module Lograge
  module Formatters
    class SomeService < Lograge::Formatters::Json
      def call(data)
        data = data.delete_if do |k|
          [:format, :view, :db].include? k
        end

        ::JSON.dump(data)

        # faktory job to ship data
        LogSenderJob.perform_async(data)
        super
      end
    end
  end
end

Это было только одно решение проблемы, которое было упрощено, так как я смог получить данные, отформатированные с помощью lograge, но другое решение состояло в том, чтобы создать собственный регистратор, и там я мог сказать ему записывать в базу данных при необходимости.

0 голосов
/ 31 октября 2018

Вам, вероятно, придется пройти через код своего приложения и вручную сохранить выходные данные из регистратора в таблицу / поле в вашей базе данных. Теоретически, любые данные, которые попадают в ваш журнал, должны быть доступны из вашего приложения.

В зависимости от того, какой объем данных вы планируете сохранить, это может быть не самой лучшей идеей, поскольку она может очень быстро увеличить вашу базу данных (приложения нередко создают журналы объемом в ГБ за один день) .

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...