2010-05-18 2 views
6

rake 작업을 실행하는 동안 로그 파일에 쓰려고합니다. 개발 모드에서는 정상적으로 작동하지만 프로덕션 환경으로 전환하자 마자 로그 파일에 아무 것도 기록되지 않습니다.레일 : 프로덕션 모드에서 레이크 작업 내에서 사용자 정의 로그 파일에 쓰는 방법은 무엇입니까?

나는 이것이 정상적인 동작이며, 또한 등대에서 #wontfix 티켓을 발견

How do I use a custom log for my rake tasks in Ruby on Rails?

여기 읽어 보시기 바랍니다.

내 질문 : 내 레이크 작업이 실행되는 동안 어떤 일이 벌어 지는지 출력하는 방법이 있습니까? 몇 시간 동안 크롤링 및 실행을 수행합니다. 출력이

/log/crawler.log

같은 특정 로그 파일에 가면 나는 지금 난 그냥 로그 파일에 기록하려면이 명령을 사용하고 선호 :

ActiveRecord::Base.logger.info "Log Text" 

감사합니다!

+0

비슷한 시나리오. –

답변

13

문제는 레일스가 생산 모드에서 '정보'수준 로그를 무시한다는 것입니다.

나는이 읽어 보시기 바랍니다 것 : http://www.ruby-doc.org/stdlib/libdoc/logger/rdoc/classes/Logger.html

을하고 자신의 로거 작성 :

logger = Logger.new('logfile.log') 
logger.info "Something happened" 
+0

나는이 접근법을 사용했다. 개발 및 준비 환경에서 작업 중입니다. 하지만 프로덕션 환경에서는 logfile.log에 로깅이 일어나지 않습니다. 준비 및 프로덕션 환경의 log_level은 1입니다. - Logger :: INFO – Anand

2

당신은 Logger.new ("file.log")로 새로운 로거을하고 그것의 호출 할 수 있습니다를 이런 식의 방법.

task :import_stuff => :environment do 
    require 'csv' 
    l = Logger.new("stuff.log") 
    csv_file = "#{RAILS_ROOT}/stuff.csv" 
    CSV.open(csv_file, 'r') do |row| 
     l.info row[1] 
    end 
    end 
2

은 아마 당신은 당신이 그것을 필요로하는 버퍼 쓰는해야합니다

logger.flush 

를하거나 자동 세척을 설정할 수 있습니다 : 나는에서 생산 모드에서 내 레이크 작업을 실행

task :foo => :environment do 
    Rails.logger.auto_flushing = 1 
    Rails.logger.info "bar" 
end 
관련 문제