2014-09-18 107 views
0

我已经编写了以下webrick服务器。它成功地写入2个日志文件。使用WEBrick日志写入文件

我想写r10kstatus命令的输出到不同的日志文件,但我有点在我的头上。

#!/usr/bin/env ruby 
require 'webrick' 


server = WEBrick::HTTPServer.new(
    :Port => ARGV.first, 
    :Logger => WEBrick::Log.new("webrick.log",WEBrick::Log::INFO), 
    :AccessLog => [[File.open("webrick_access.log",'w'),WEBrick::AccessLog::COMBINED_LOG_FORMAT]] 
) 

server.mount_proc '/' do |req, res| 

    r10kstatus = `sudo r10k deploy environment -pv 2>&1` 
    log_foo = WEBrick::Log.new("r10k_deploy.log",WEBrick::Log::DEBUG) 
    File.write(log_foo, r10kstatus) 

end 
trap 'INT' do 
    server.shutdown 
end 
server.start 

http://www.ruby-doc.org/stdlib-2.0/libdoc/webrick/rdoc/WEBrick/BasicLog.html#method-i-log

这3条线工作不

r10kstatus = `sudo r10k deploy environment -pv 2>&1` 
    log_foo = WEBrick::Log.new("r10k_deploy.log",WEBrick::Log::DEBUG) 
    File.write(log_foo, r10kstatus) 

我怎么能写的r10kstatus日志文件的标准输出?

回答

1

想通了。

公共类方法和公共实例方法之间存在差异。

我不得不创建一个对象,然后调用调试实例方法针对对象

完整的解决方案:

#!/usr/bin/env ruby 
require 'webrick' 


server = WEBrick::HTTPServer.new(
    :Port => ARGV.first, 
    :Logger => WEBrick::Log.new("r10k_gitlab_webhook.log",WEBrick::Log::INFO), 
    :AccessLog => [[File.open("r10k_gitlab_webhook.log",'w'),WEBrick::AccessLog::COMBINED_LOG_FORMAT]] 
) 

r10k_comman_log = WEBrick::Log.new('foo.log',WEBrick::Log::DEBUG) 
r10k_comman_log.warn('hi') 

server.mount_proc '/' do |req, res| 

    r10kstatus = `whoami` 
    r10k_comman_log.debug(r10kstatus) 
end 

trap 'INT' do 
    server.shutdown 
end 
server.start