2016-03-02 66 views
0

我使用耙來構建我的C++項目,並且我有很多依賴和任務。耙 - 將每個任務的日誌保存到單獨的文件

我想將每個任務的日誌保存到單獨的日誌文件中。可能嗎?我想要將所有stdout從任務保存到文件。

我不能給這個喜歡:

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

,因爲有時我失去了從工藝信息,因爲有時我運行一些子等。我希望所有的標準輸出,但每個任務分開。

我可以這樣做嗎?我嘗試從耙子中的Task類修改execure函數,但沒有成功。

回答

1

使用字符串插值來創建一個日誌文件每耙::任務

可以使用Rake::Task#name來獲得當前任務的名稱進行插值到你的日誌文件的名稱。您也可以使用任務名稱程序名作爲您的日誌條目。

除了標準的Rake方法之外,Rakefile還可以包含任意的Ruby代碼。您可以使用它創建自定義日誌記錄方法,該方法允許您爲每個Rake任務創建日誌,並使用Kernel#`方法捕獲shell命令的標準輸出,並將其作爲日誌消息傳遞給自定義日誌記錄方法。

一個成功範例

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. 
+0

貌似這部作品,謝謝, – esio

相關問題