在一个rake任务中,如果我使用puts命令,那么我会在控制台上看到输出。但是,当应用程序部署到生产环境中时,我不会在日志文件中看到该消息。
但是,如果我说Rails.logger.info,那么在开发模式下,我在控制台上看不到任何东西。我得去日志文件里跟踪一下。
我希望使用Rails.logger.info,并在rake任务内部的开发模式下,logger的输出也应该发送到控制台。
有没有办法做到这一点?
在一个rake任务中,如果我使用puts命令,那么我会在控制台上看到输出。但是,当应用程序部署到生产环境中时,我不会在日志文件中看到该消息。
但是,如果我说Rails.logger.info,那么在开发模式下,我在控制台上看不到任何东西。我得去日志文件里跟踪一下。
我希望使用Rails.logger.info,并在rake任务内部的开发模式下,logger的输出也应该发送到控制台。
有没有办法做到这一点?
9条答案
按热度按时间vh0rcniy1#
将其放入
application.rb
或rake任务初始化代码中Rails 3代码请注意,这将覆盖
development.log
的日志记录。如果你同时需要STDOUT
和development.log
,你需要一个 Package 函数。如果您只希望在Rails控制台中实现这种行为,请将相同的代码块放在
~/.irbrc
中。14ifxucb2#
你可以创建一个新的rake任务来让它工作。
这样,当你执行rake任务时,你可以先添加to_stdout以获取stdout日志消息,或者不包含它以将消息发送到默认日志文件
uxhixvfz3#
代码
对于Rails 4和更新版本,可以使用Logger broadcast。
如果你想在开发模式下为rake任务获取STDOUT和文件日志,你可以将以下代码添加到
config/environments/development.rb
中:测试
下面是一个小的Rake任务来测试上面的代码:
运行
rake stdout_and_log:test
输出而
已添加到
log/development.log
。运行
rake stdout_and_log:test RAILS_ENV=production
输出而
已添加到
log/production.log
。wmomyfyw4#
Rake任务由用户在命令行上运行。他们需要立即知道的任何内容(“已处理的5行”)都应该在终端上用
puts
输出。任何需要为子孙后代保留的内容(“发送警告电子邮件到email protected(https://stackoverflow.com/cdn-cgi/l/email-protection)”)都应该发送到
Rails.logger
。eanckbw95#
我认为使用
Rails.logger.info
是正确的选择。您将无法在服务器控制台中看到它,因为它不会通过服务器运行。只要打开一个新的控制台和
tail -f
的日志文件,它会做的伎俩。许多用户都知道UNIX®命令“tail”,它可用于显示大文件的最后几行。这对于查看日志文件等非常有用。
在某些情况下,更有用的是'tail'命令的'-f'参数。这会导致tail“跟随"文件的输出。最初,响应将与'tail'本身相同-将显示文件的最后几行。但是,该命令不会返回到提示符,而是继续“跟踪”文件。当额外的行添加到文件中时,它们将显示在终端上。这对于查看日志文件或任何其他可能随时间追加的文件非常有用。键入'人尾'了解更多关于这个和其他尾部选项的细节。
(via)
kadbb4596#
在Rails 2.X中,将日志重定向到模型中的STDOUT:
要重定向控制器中的记录器,请执行以下操作:
u4dcyp6a7#
使用“&”执行后台作业,并打开脚本/控制台或其他东西。这样,您就可以在同一个窗口中运行多个命令。
hrirmatl8#
创建一个应用程序助手来检测哪个环境正在运行并做正确的事情怎么样?
然后调用output_debug而不是puts或logger.info
jum4pzuy9#
@Eric Duminil的回答。我们可以使用rails提供的usex 1 m0n1x钩子,只有在rake任务被调用时才运行代码块,即当服务器或控制台运行时,此块将不会运行。
输出量: