2014-09-18 2 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 
:

나는

전체 솔루션을 객체를 생성하고 그 객체에 대해 디버그 인스턴스 메소드를 호출했다