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

Rake - save log from each task to separate file

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

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

我不能这样:

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

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

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

使用字符串插值为每个 Rake::Task

创建一个日志文件

您可以使用 Rake::Task#name 获取当前任务的名称以插入到您的日志文件的名称中。您还可以使用任务名称作为日志条目的 程序名称

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

一个实例

Rakefile

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.