Nic*_*ilt 107 rake ruby-on-rails
在rake任务中,如果我使用puts命令,那么我在控制台上看到输出.但是,在生产中部署应用程序时,我不会在日志文件中看到该消息.
但是,如果我说Rails.logger.info然后在开发模式下,我在控制台上看不到任何内容.我需要去日志文件和尾部.
我理想情况下喜欢使用Rails.logger.info并在rake任务中的开发模式下,logger的输出也应该发送到控制台.
有没有办法实现这一目标?
shm*_*ael 55
把它放入application.rb
或在rake任务中初始化代码
if defined?(Rails) && (Rails.env == 'development')
Rails.logger = Logger.new(STDOUT)
end
Run Code Online (Sandbox Code Playgroud)
这是Rails 3代码.请注意,这将覆盖日志记录development.log
.如果你想要两者STDOUT
,development.log
你需要一个包装函数.
如果您只想在Rails控制台中使用此行为,请将相同的代码块放在您的~/.irbrc
.
Pet*_*umm 34
您可以创建一个新的rake任务来使其工作.
desc "switch logger to stdout"
task :to_stdout => [:environment] do
Rails.logger = Logger.new(STDOUT)
end
Run Code Online (Sandbox Code Playgroud)
这样,当您执行rake任务时,可以先添加to_stdout以获取stdout日志消息,或者不包含它以将消息发送到默认日志文件
rake to_stdout some_task
Run Code Online (Sandbox Code Playgroud)
Jon*_*ian 11
Rake任务由用户在命令行上运行.他们需要立即知道的任何事情("处理过的5行")应该在终端输出puts
.
任何需要为后代保留的东西("发送警告电子邮件到jsmith@example.com")都应发送给Rails.logger
.
mar*_*cgg 10
我会说使用Rails.logger.info
是要走的路.
您将无法在服务器控制台中看到它,因为它不会通过服务器运行.只需打开一个新的控制台和tail -f
日志文件,就可以了.
许多用户都知道UNIX®命令'tail',它可用于显示大文件的最后几行.这对于查看日志文件等非常有用.
在某些情况下更有用的是'tail'命令的'-f'参数.这会导致tail'跟随'文件的输出.最初,响应将与'tail'自身相同 - 将显示文件的最后几行.但是,该命令不会返回到提示符,而是继续"跟随"该文件.当其他行添加到文件中时,它们将显示在终端上.这对于查看日志文件或可能随时间附加的任何其他文件非常有用.输入'man tail'以获取有关此选项和其他尾部选项的更多详细信息.
(通过)
对于Rails 4和更新版本,您可以使用Logger广播.
如果要在开发模式下同时获取rake任务的STDOUT和文件日志记录,可以将此代码添加到config/environments/development.rb
:
if File.basename($0) == 'rake'
# http://stackoverflow.com/questions/2246141/puts-vs-logger-in-rails-rake-tasks
log_file = Rails.root.join("log", "#{Rails.env}.log")
Rails.logger = ActiveSupport::Logger.new(log_file)
Rails.logger.extend(ActiveSupport::Logger.broadcast(ActiveSupport::Logger.new(STDOUT)))
end
Run Code Online (Sandbox Code Playgroud)
这是一个小Rake任务来测试上面的代码:
# lib/tasks/stdout_and_log.rake
namespace :stdout_and_log do
desc "Test if Rails.logger outputs to STDOUT and log file"
task :test => :environment do
puts "HELLO FROM PUTS"
Rails.logger.info "HELLO FROM LOGGER"
end
end
Run Code Online (Sandbox Code Playgroud)
运行rake stdout_and_log:test
输出
HELLO FROM PUTS
HELLO FROM LOGGER
Run Code Online (Sandbox Code Playgroud)
而
HELLO FROM LOGGER
Run Code Online (Sandbox Code Playgroud)
已被添加到log/development.log
.
运行rake stdout_and_log:test RAILS_ENV=production
输出
HELLO FROM PUTS
Run Code Online (Sandbox Code Playgroud)
而
HELLO FROM LOGGER
Run Code Online (Sandbox Code Playgroud)
已被添加到log/production.log
.