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.
我正在使用 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.