Ruby新手我現在有一個簡單的驅動程序腳本,它在其他ruby文件中運行多個測試腳本。我有一個名爲RunScript()的方法來運行測試腳本。記錄器作爲驅動程序腳本中的全局變量創建,以便其他文件中的測試腳本可以使用它。記錄器記錄到目錄中的日誌文件。捕獲方法內的記錄器輸出
我想要做的就是捕獲在RunScript()方法僅運行時發生的日誌輸出,並將其存儲爲字符串。所以基本上我想爲每個測試腳本提供一串日誌輸出,並保留存儲所有輸出的日誌文件。
Ruby新手我現在有一個簡單的驅動程序腳本,它在其他ruby文件中運行多個測試腳本。我有一個名爲RunScript()的方法來運行測試腳本。記錄器作爲驅動程序腳本中的全局變量創建,以便其他文件中的測試腳本可以使用它。記錄器記錄到目錄中的日誌文件。捕獲方法內的記錄器輸出
我想要做的就是捕獲在RunScript()方法僅運行時發生的日誌輸出,並將其存儲爲字符串。所以基本上我想爲每個測試腳本提供一串日誌輸出,並保留存儲所有輸出的日誌文件。
我已經做了這幾種不同的方式,我發現最方便的是要建立一個代表團對象,將消息路由到兩個或更多的記錄器:
require 'stringio'
require 'logger'
class LoggerTee
def initialize *loggers
@loggers = loggers
end
def method_missing meth, *args, &block
@loggers.each { |logger| logger.send(meth, *args, &block) }
end
end
capture_stringio = StringIO.new
console_log = Logger.new(STDOUT)
string_log = Logger.new(capture_stringio)
log = LoggerTee.new(console_log, string_log)
log.debug 'Hello world'
puts capture_stringio.string
輸出:
D, [2013-04-30T18:59:18.026285 #14533] DEBUG -- : Hello world
D, [2013-04-30T18:59:18.026344 #14533] DEBUG -- : Hello world
在這個例子中,LoggerTee類用兩個獨立的記錄器實例化,一個進入控制檯,另一個進入一個StringIO實例。生成的LoggerTee實例是任何標準記錄器對象的替代品。
確實沒有辦法在沒有導入額外的東西的情況下獲取記錄器的內容。這是一個不同的解決方案。 由於記錄儀只有幾個測井方法,你可以簡單地讓自己和日誌,並在功能
#the_logger - regular logger
#the_arr - a global array to keep your logs in
#the_string - log string
def log_info(the_logger, the_arr, the_string)
the_logger.info(the_string);
the_arr.push(the_string);
end
.....................and use global the_arr to get your output
做此「調試」,「信息」,「致命的」收集日誌,這是用一個簡單的方法您的日誌輸出爲你運行程序
這個工作完美一些修改後的感謝! – sng 2013-05-01 16:31:31
只爲其他可能有相同問題的人提供,我在運行方法的開始處添加了@@ capture_stringio.truncate(@@ capturestringio.rewind),以便清除下一個腳本的日誌內容。 – sng 2013-05-03 15:39:15