Rake - 将每个任务的日志保存到单独的文件中

时间:2016-03-02 21:09:25

标签: ruby rake

我使用rake构建我的C ++项目,并且我有很多依赖项和任务。

我想将每个任务的日志保存到单独的日志文件中。可能吗?我希望将所有标准输出从任务保存到文件。

我不能这样:

log = Logger.new
log.info sh "my command"

因为有时候我从进程中丢失了信息,因为有时我会运行一些子进程,等等。我想要所有STDOUT但是为每个任务分开。

我可以这样做吗?我尝试在rake中修改Task类中的execure函数,但没有成功。

1 个答案:

答案 0 :(得分:1)

使用字符串插值为每个Rake创建一个日志文件::任务

您可以使用Rake::Task#name获取要插入日志文件名称的当前任务的名称。您还可以将任务名称用作日志条目的 progname

除了标准的Rake方法之外,Rakefile还可以包含任意Ruby代码。您可以使用它来创建一个自定义日志记录方法,允许您为每个Rake任务创建一个日志,使用Kernel#`方法捕获shell命令的标准输出,并将其作为日志消息传递给自定义日志记录方法。 / p>

一个工作示例

Rake文件

require 'logger'

def log task, msg
  l = Logger.new "#{task}.log"
  l.progname = task
  l.info msg
end

task :foo do |task|
  msg = `echo Hello, world.`
  log task.name, msg
end

task :bar do |task|
  msg = `echo Goodbye, cruel world.`
  log task.name, msg
end

task :default => [:foo, :bar]

样本输出

$ rake; tail +1 *log
==> bar.log <==
# Logfile created on 2016-03-02 17:31:49 -0500 by logger.rb/53141
I, [2016-03-02T17:31:49.678729 #80846]  INFO -- bar: Goodbye, cruel world.


==> foo.log <==
# Logfile created on 2016-03-02 17:31:49 -0500 by logger.rb/53141
I, [2016-03-02T17:31:49.677165 #80846]  INFO -- foo: Hello, world.