我使用rake构建我的C ++项目,并且我有很多依赖项和任务。
我想将每个任务的日志保存到单独的日志文件中。可能吗?我希望将所有标准输出从任务保存到文件。
我不能这样:
log = Logger.new
log.info sh "my command"
因为有时候我从进程中丢失了信息,因为有时我会运行一些子进程,等等。我想要所有STDOUT但是为每个任务分开。
我可以这样做吗?我尝试在rake中修改Task类中的execure函数,但没有成功。
答案 0 :(得分:1)
您可以使用Rake::Task#name获取要插入日志文件名称的当前任务的名称。您还可以将任务名称用作日志条目的 progname 。
除了标准的Rake方法之外,Rakefile还可以包含任意Ruby代码。您可以使用它来创建一个自定义日志记录方法,允许您为每个Rake任务创建一个日志,使用Kernel#`方法捕获shell命令的标准输出,并将其作为日志消息传递给自定义日志记录方法。 / p>
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.