답변:
이것을 application.rb
, 또는 레이크 작업 초기화 코드에 넣으십시오.
if defined?(Rails) && (Rails.env == 'development')
Rails.logger = Logger.new(STDOUT)
end
이것은 Rails 3 코드입니다. 이것은에 대한 로깅을 재정의합니다 development.log
. 당신이 모두를 원하는 경우 STDOUT
와 development.log
당신은 래퍼 함수가 필요합니다.
Rails 콘솔에서만이 동작을 원하면 동일한 코드 블록을 ~/.irbrc
.
config.logger = Logger.new(STDOUT)
레이크 작업은 사용자가 명령 줄에서 실행합니다. 즉시 알아야 할 모든 것 ( "처리 된 5 개 행")은 터미널에 puts
.
나중에 보관해야하는 모든 항목 ( "jsmith@example.com으로 경고 이메일을 보냄")은 Rails.logger
.
나는 사용 Rails.logger.info
이 갈 길이 라고 말하고 싶습니다 .
서버를 통해 실행되지 않기 때문에 서버 콘솔에서 볼 수 없습니다. 새 콘솔과 tail -f
로그 파일을 열기 만하면 됩니다.
많은 사용자가 큰 파일의 마지막 몇 줄을 표시하는 데 사용할 수있는 UNIX® 명령 'tail'을 알고 있습니다. 이것은 로그 파일 등을 보는 데 유용 할 수 있습니다.
일부 상황에서 훨씬 더 유용한 것은 'tail'명령에 대한 '-f'매개 변수입니다. 이로 인해 tail이 파일의 출력을 '따라'게됩니다. 처음에 응답은 자체적으로 '꼬리'에 대한 것과 동일합니다. 파일의 마지막 몇 줄이 표시됩니다. 그러나 명령은 프롬프트로 돌아 가지 않고 대신 파일을 계속 '따라갑니다'. 파일에 추가 줄이 추가되면 터미널에 표시됩니다. 이것은 로그 파일이나 시간이 지남에 따라 추가 될 수있는 다른 파일을 보는 데 매우 유용합니다. 이것과 다른 꼬리 옵션에 대한 자세한 내용을 보려면 'man tail'을 입력하십시오.
( 경유 )
tailf
"tail -f와 비슷하지만 파일이 커지지 않을 때는 파일에 액세스하지 않습니다"(맨 페이지에서)를 사용하는 것입니다. 너무 짧습니다
Rails 4 이상에서는 Logger broadcast를 사용할 수 있습니다 .
개발 모드에서 rake 작업에 대한 STDOUT 및 파일 로깅을 모두 얻으려면이 코드를 config/environments/development.rb
다음에 추가 할 수 있습니다 .
if File.basename($0) == 'rake'
# http://stackoverflow.com/questions/2246141/puts-vs-logger-in-rails-rake-tasks
log_file = Rails.root.join("log", "#{Rails.env}.log")
Rails.logger = ActiveSupport::Logger.new(log_file)
Rails.logger.extend(ActiveSupport::Logger.broadcast(ActiveSupport::Logger.new(STDOUT)))
end
다음은 위의 코드를 테스트하는 작은 Rake 작업입니다.
# lib/tasks/stdout_and_log.rake
namespace :stdout_and_log do
desc "Test if Rails.logger outputs to STDOUT and log file"
task :test => :environment do
puts "HELLO FROM PUTS"
Rails.logger.info "HELLO FROM LOGGER"
end
end
rake stdout_and_log:test
출력 실행
HELLO FROM PUTS
HELLO FROM LOGGER
동안
HELLO FROM LOGGER
에 추가되었습니다 log/development.log
.
rake stdout_and_log:test RAILS_ENV=production
출력 실행
HELLO FROM PUTS
동안
HELLO FROM LOGGER
에 추가되었습니다 log/production.log
.
basename($0) == 'rake'
되기 때문에 트릭이 더 이상 작동하지 않습니다 . .NET Framework를 설정하는 작업에 의존하는 것 이상의 좋은 대체품을 찾고 싶습니다 . (그 부분은, 적어도, 여전히 잘 작동합니다.)rails
rake
broadcast
Rakefile
프로젝트의 루트에
실행중인 환경을 감지하고 올바른 작업을 수행하는 애플리케이션 도우미를 만드는 것은 어떻습니까?
def output_debug(info)
if RAILS_ENV == "development"
puts info
else
logger.info info
end
end
그런 다음 puts 또는 logger.info 대신 output_debug를 호출하십시오.
Rails 2.X에서 로거를 모델의 STDOUT으로 리디렉션합니다.
ActiveRecord::Base.logger = Logger.new(STDOUT)
컨트롤러에서 로거를 리디렉션하려면 :
ActionController::Base.logger = Logger.new(STDOUT)
'&'를 사용하여 백그라운드 작업을 실행하고 스크립트 / 콘솔 등을 엽니 다. 이렇게하면 동일한 창에서 여러 명령을 실행할 수 있습니다.
tail -f log/development.log &
script/console
Loading development environment (Rails 2.3.5)
>> Product.all
2011-03-10 11:56:00 18062 DEBUG Product Load (6.0ms) SELECT * FROM "products"
[<Product.1>,<Product.2>]
note 로깅 출력이 많으면 빠르게 엉망이 될 수 있습니다.
Rails.logger = Logger.new(STDOUT)
development.rb에 넣는 것이 더 쉽지 않을까요 ?