2010-03-02 55 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 

而且我们回来了!

相关问题