কনসোলে রেল এসকিউএল লগিং অক্ষম করুন


262

যখন আমি কনসোলে কমান্ডগুলি চালাচ্ছি তখন এসকিউএল কোয়েরি লগিংটি অক্ষম করার কোনও উপায় আছে? আদর্শভাবে, এটি দুর্দান্ত হবে যদি আমি কেবল এটি অক্ষম করতে পারি এবং কনসোলের একটি কমান্ড দিয়ে এটি পুনরায় সক্ষম করতে পারি।

আমি কিছু ডিবাগ করার চেষ্টা করছি এবং কিছু প্রাসঙ্গিক ডেটা মুদ্রণের জন্য "পুটস" ব্যবহার করছি। তবে স্ক্যালের ক্যোয়ারী আউটপুট এটি পড়া শক্ত করে তুলছে।


সম্পাদনা: আমি অন্য একটি সমাধান খুঁজে পেয়েছি, যেহেতু লগারটি কখনও কখনও শূন্য করার জন্য সেট করা একটি ত্রুটি উত্থাপন করে, যদি আমার কোড ব্যতীত অন্য কোনও কিছু লগারকে কল করার চেষ্টা করে।

লগারে সেট করার পরিবর্তে nilআপনি লগারের স্তরটি সেট করতে পারেন 1

ActiveRecord::Base.logger.level = 1 # or Logger::INFO

since setting the logger to nil sometimes raised an errorYap .. আমি এই এক যখন চালানোর চেষ্টা পেয়েছিলাম rake db:migrate stackoverflow.com/questions/1719212/...
abbood

3
নিশ্চিত করা হচ্ছে যে এটি প্রারম্ভিক 4.1.0 রেলগুলিতে কাজ করে।
অমল চৌধুরি

উত্তর:


314

এটি বন্ধ করতে:

old_logger = ActiveRecord::Base.logger
ActiveRecord::Base.logger = nil

এটি আবার চালু করতে:

ActiveRecord::Base.logger = old_logger

1
আমি কি এই জায়গায় রাখতে পারি তাই আমি এসকিউএল আউটপুট স্থায়ীভাবে অক্ষম করব? আমি এটিকে envs / dev.rb এ যুক্ত করার চেষ্টা করেছি তবে ভাগ্য নয়।
samvermette

5
আপনি এই কোডটি রাখতে পারেন .irbrcযা মূলত .bashrcরেল কনসোলের জন্য। আসলে আপনি চাইলে কিছু .irbrcকরতে পারেন, যেমন, সিনট্যাক্স কালারিং, ইতিহাস, vi এডিট কোড এবং তারপরে এটি রেলস কনসোলে চালানো ইত্যাদি। আমার রত্নটি পরীক্ষা utility_beltকরুন আপনি রুবি ১.৮ বা রুবি ১.৯ পোর্টে আছেন কিনা বলা হয়flyrb
গিলস বোকেট

2
@ গাইলস বকেট: আসলে, তবে এটি আসলে আপনার রুবি ইন্টারেক্টিভ কমান্ডলাইনের .irbrcমতো । এটি কোনও রেলের জিনিস নয়। আমি ভাবছি আপনি যখন রেলের পরিবেশের বাইরে ইরিব চালাচ্ছিলেন তখন আপনি রেল ক্লাসগুলি উল্লেখ করার চেষ্টা করলে আপনি সম্ভবত ত্রুটিগুলি পেয়েছেন। .bashrc
ইমেজিট করুন

9
@ সামওয়ারমেট আপনি এটি একটি কনফিগার ফাইলে করতে পারেন। উদাহরণস্বরূপ:config/initializers/activerecord_logger.rb
উরি

15
ActiveRecord::Base.logger.level = 1এটি একটি আরও ভাল উত্তর কারণ আপনি .info এবং অন্যদের ব্যবহার করলে এটি ব্যাতিক্রম বাড়ায় না।
ডার্টি হেনরি 16

72

এখানে কিছুটা ক্লিনার হিসাবে বিবেচনা করা যায় এমন একটি ভিন্নতা যা এখনও এআর থেকে সম্ভাব্য অন্যান্য লগিংয়ের অনুমতি দেয়। কনফিগারেশন / পরিবেশ / উন্নয়ন.rb এ:

config.after_initialize do
  ActiveRecord::Base.logger = Rails.logger.clone
  ActiveRecord::Base.logger.level = Logger::INFO
end

বিজোড়, আমার জন্য নয়, R.০ বা ৩.১ রেলে রয়েছে। কেন আপনার রেলস.লগার একটি উত্তর-পরে ব্লকটিতে নিরস্ত থাকবে, আপনি কি আপনার রেল ইনি স্ট্যাকটি কাস্টমাইজ করার জন্য অন্য কিছু করেছিলেন, বা আপনি কনফিগারেশনটি ভুলে গেছেন?
জ্রোকাইন্ড

1
আমার রেলস 3.1 অ্যাপে দুর্দান্ত কাজ করে। সেরা সমাধানটি দেখে মনে হচ্ছে। +1
মার্টিজন

আমার জন্য কাজ করে না ... পরে_নাইটায়ালাইজ ব্লকে স্তরটি ঠিক করে দেয় তবে কনসোলটি খোলা হওয়ার পরে স্তরটি 0-এ ফিরে আসে। স্ট্রেঞ্জ। (আমি প্রাই কে কনসোল প্রতিস্থাপন হিসাবে ব্যবহার করছি, এ কারণেই কি?)
মাইক ব্লিথ

63

এটি কনসোলের জন্য উপযুক্ত সমাধান নাও হতে পারে, তবে এই সমস্যার জন্য রেয়েলগুলির একটি পদ্ধতি রয়েছে: লগার # নীরবতা

ActiveRecord::Base.logger.silence do
  # the stuff you want to be silenced
end

4
কেবলমাত্র 3 রেল পর্যন্ত কাজ করবে: "প্রসারণ সতর্কতা: নীরবতা অবহেলা করা হয়েছে এবং
প্রজন্ম

6
@ কঙ্গুর আমি ৪.২ রেলের উপরে রয়েছি এবং নীরবতা
ঠিকঠাক

2
@ কঙ্গুর আমি এই বিষয়টিও নিশ্চিত করতে পারি যে এই পদ্ধতিটি 4.2 রেলগুলিতে ঠিক কাজ করেছে
গ্রেগ ম্যাথু ক্রসলে

6
5 রেলগুলিতে কাজ করে এবং আমি কোনও সতর্কতা দেখি না। এটি সেরা উত্তর আইএমও।
ওভারলোড

1
Ails. রেলগুলিতে সূক্ষ্মভাবে কাজ করে Maybe সম্ভবত এটি কিছুটা সরানো হয়েছে?
জনসিপ

16

4 রেলগুলির জন্য আপনি পরিবেশের ফাইলে নিম্নলিখিতগুলি রাখতে পারেন:

# /config/environments/development.rb

config.active_record.logger = nil

এটি কেবলমাত্র উত্পাদনে কার্যকর হবে, যেখানে লগিং বেশিরভাগ ক্ষেত্রেই ছাড়িয়ে যায় ....
রব

13

যদি কেউ আসলে এসকিউএল স্টেটমেন্ট লগিংটি ছুঁড়ে ফেলতে চায় (লগিং স্তর পরিবর্তন না করে এবং তাদের এআর মডেলগুলি থেকে লগিং রাখার সময়):

লাইন যে (যাই হোক, পাগল 3.2.16 মধ্যে) লগে লিখেছেন থেকে কল হল debugমধ্যে lib/active_record/log_subscriber.rb:50

যে ডিবাগ পদ্ধতি দ্বারা সংজ্ঞায়িত করা হয় ActiveSupport::LogSubscriber

সুতরাং আমরা লগিংটিকে এরকমভাবে ওভাররাইট করে নক আউট করতে পারি:

module ActiveSupport
  class LogSubscriber
    def debug(*args, &block)
    end
  end
end

ভাল একটা. এটি Rails.logger.debugবিবৃতি প্রভাবিত না করে এসকিউএল লগিংয়ে কাজ করে ।
তিমু লেইস্তি

এখানে মোট noob। আমাদের এটি কোথায় রাখা উচিত?
ডিভাইস

আমি এটা lib / অনুপস্থিত monkeypatch.rb রাখা এবং পাগল কনফিগ / application.rb নিম্নলিখিত লাইন দিয়ে এটা টান: Dir.glob( "./lib/*.{rb}" ).each{ | file | require file }। মনে রাখবেন যে কেউ কেউ বানরটি পাঠাচ্ছে। সম্ভবত এটি আপনার প্রোডাকশন কোডে পরীক্ষা করা উচিত নয়।
ভুয়াফেল্ট

8

আমি এটি ব্যবহার করেছি: config.log_level = :info সম্পাদনা করুনconfig/environments/performance.rb

আমার জন্য দুর্দান্ত কাজ করা, এসকিউএল আউটপুটকে প্রত্যাখ্যান করে এবং কেবল রেন্ডারিং এবং গুরুত্বপূর্ণ তথ্য দেখায়।


আমি ৪.১.০ রেলের উপরে আছি এবং এটি আমার পক্ষে ভাল কাজ করেছে। ধন্যবাদ
জাকারিয়া

4

R.২ কারাগারে আমি কনফিগারেশন / পরিবেশ / উন্নয়ন.rb এ এর ​​মতো কিছু করছি:

module MyApp
  class Application < Rails::Application
    console do
      ActiveRecord::Base.logger = Logger.new( Rails.root.join("log", "development.log") )
    end
  end
end

2

ঠিক একটি এফওয়াইআই হিসাবে, রেল 2 এ আপনি করতে পারেন

ActiveRecord::Base.silence { <code you don't want to log goes here> }

do endআপনি চাইলে অবশ্যই কোঁকড়ানো ধনুর্বন্ধনীগুলি একটি ব্লকের সাথে প্রতিস্থাপন করা যেতে পারে ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.