В задаче rake, если я использую команду put, я вижу вывод на консоли. Однако я не увижу это сообщение в файле журнала, когда приложение будет развернуто на производстве.
Однако если я скажу Rails.logger.info, тогда в режиме разработки я ничего не вижу на консоли. Мне нужно перейти к файлу журнала и следить за ним.
В идеале я хотел бы использовать Rails.logger.info, а в режиме разработки внутри задачи rake вывод логгера также должен быть отправлен на консоль.
Есть ли способ добиться этого?
источник
Rails.logger = Logger.new(STDOUT)
development.rb?config.logger = Logger.new(STDOUT)
Вы можете создать новую задачу с граблями, чтобы заставить это работать.
Таким образом, когда вы выполняете свою задачу rake, вы можете сначала добавить to_stdout, чтобы получать сообщения журнала stdout, или не включать его, чтобы сообщения отправлялись в файл журнала по умолчанию
источник
Задачи Rake запускаются пользователем из командной строки. Все, что им нужно знать сразу («обработанные 5 строк»), следует вывести на терминал с помощью
puts
.Все, что необходимо сохранить для потомков («отправлено письмо с предупреждением на адрес jsmith@example.com»), следует отправлять на адрес
Rails.logger
.источник
Я бы сказал, что использование
Rails.logger.info
- это лучший способ.Вы не сможете увидеть его в консоли сервера, потому что он не будет работать через сервер. Просто откройте новую консоль и
tail -f
файл журнала, это поможет.( через )
источник
tailf
«Он похож на tail -f, но не обращается к файлу, когда он не увеличивается» (из man-страницы). Он тоже корочеКод
Для Rails 4 и новее вы можете использовать трансляцию Logger .
Если вы хотите получить и STDOUT, и журнал файлов для задач rake в режиме разработки, вы можете добавить этот код в
config/environments/development.rb
:Тест
Вот небольшая задача Rake для проверки приведенного выше кода:
Текущие
rake stdout_and_log:test
выходыпока
был добавлен в
log/development.log
.Текущие
rake stdout_and_log:test RAILS_ENV=production
выходыпока
был добавлен в
log/production.log
.источник
basename($0) == 'rake'
трюк больше не работает, потому чтоrails
выполняется сама командаrake
. Я бы хотел найти ему хорошую замену вне зависимости от задачи, которая устанавливаетbroadcast
. (По крайней мере, эта часть все еще работает нормально.)Rakefile
в корень вашего проектаКак насчет создания помощника приложения, который определяет, какая среда запущена, и делает правильные вещи?
Затем вызовите output_debug вместо put или logger.info
источник
В Rails 2.X для перенаправления логгера на STDOUT в моделях:
Чтобы перенаправить регистратор в контроллеры:
источник
Выполните фоновое задание с помощью '&' и откройте скрипт / консоль или что-то еще ... Таким образом, вы можете запускать несколько команд в одном окне.
note Примечание Может быстро стать небрежным при большом объеме журналов.
источник