2010-03-02 54 views

回答

15

這取決於。許多開發人員將他們的應用程序日誌文件定義爲app/servername.log,或者僅限於Rack應用程序加載的當前路徑。

是的,你可以改變它的路徑。

通常你會得到一個config.ru文件的東西,如:在這種情況下,日誌文件位於APPDIR/sinatra.log

 
    log = File.new("sinatra.log", "a+") 
    $stdout.reopen(log) 
    $stderr.reopen(log) 

和/或

 
configure do 
    LOGGER = Logger.new("sinatra.log") 
    enable :logging, :dump_errors 
    set :raise_errors, true 
end 

。但請記住,此代碼可以位於Rack應用程序的任何位置,因此請在您的應用程序目錄中尋求「登錄」。

 
$ cd projectname 
$ grep -ri 'log' * 

玩得開心,並在這裏發佈您的config.ru和/或mainprojectfile.rb。

+0

嗨弗朗西斯科。 是的,這對我來說非常完美。 log_path = 「<路徑到日誌文件>」 LOGGER = Logger.new(log_path, 「每日」) 日誌= File.new(log_path, 「A +」) STDOUT.reopen(日誌) STDERR .reopen(log) – 2010-03-15 09:04:22

+0

@include:有沒有辦法讓生產和開發環境記錄到文件中,但是會將測試日誌發送到終端?看來,當我重新打開$ stdout和$ stderr時,它也將測試輸出重定向到文件。 – 2012-02-09 13:10:43

+1

重新打開STDOUT會使乘客無法啓動:https://github.com/phusion/passenger/wiki/Debugging-application-startup-problems – fguillen 2013-12-11 19:25:55

-2

object_id最初是相同的,但最好分配給$stderr。這也讓你打開返回流至其當初與STDERR其中:

$ irb 
>> $stderr.object_id == STDERR.object_id 
=> true 

相同的對象,現在是這樣。發送到其它地方,

>> $stderr = File.open('/tmp/foo', 'w') 
=> #<File:/tmp/foo> 
>> $stderr.puts "Uh-oh, foo" 
=> nil 
>> $stderr.flush # if you want to verify its output 
=> #<File:/tmp/foo> 
>> $stderr.object_id == STDERR.object_id 
=> false 

$stderrSTDERR引用不同的對象。 STDERR仍然流到這裏是端子,

>> STDERR.puts "Uh-oh, original STDERR" 
Uh-oh, original STDERR 
=> nil 

恢復$stderr

>> $stderr = STDERR 
=> #<IO:0x106fddb88> 
>> $stderr.object_id == STDERR.object_id 
=> true 

而且我們回來了!

相關問題