রুবে অন রেল উত্পাদন লগ ঘূর্ণন


172

রেলের অন অ্যাপ্লিকেশন অ্যাপে রুবিতে লগ রোটেশন সক্ষম করার সর্বোত্তম উপায় কী?

এটি কি হোস্টিং সার্ভারে লোগ্রোটেট ব্যবহার করে বা অ্যাপ্লিকেশন থেকে লগার শুরু করার সময় ব্যবহারের জন্য বিকল্পগুলির একটি সেট রয়েছে?


আমি দেখতে পাচ্ছি যে এর সম্পর্কে ইতিমধ্যে একটি উত্তর রয়েছে, তবে আমি জিজ্ঞাসা করতে চেয়েছিলাম আপনার পরিবেশটি কী। আমি নিজেই সিসলগ + লোগ্রোটেট পদ্ধতি ব্যবহার করি তবে স্পষ্টতই পরিবেশের ধরণের (উত্সর্গীকৃত, ভাগ করা হোক না কেন; কোন ধরণের * আইএক্স ওএস হোস্ট করছে, বা অন্য কোনও, ইত্যাদি) এখানে কিছুটা জন্মগ্রহণ করতে পারে।
ইয়েলুমিনেট

উত্তর:


203

বিকল্প 1: সিসলগ + লোগ্রোটেট

সিস্টেম লগ সরঞ্জামগুলি ব্যবহার করতে, আপনি রেলগুলি কনফিগার করতে পারেন।

কনফিগারেশন / পরিবেশ / product.rb এর একটি উদাহরণ ।

# Use a different logger for distributed setups
config.logger = SyslogLogger.new

এইভাবে, আপনি সিসলগে লগইন করেন এবং লগগুলি ঘোরানোর জন্য ডিফল্ট লোগ্রোটেট সরঞ্জাম ব্যবহার করতে পারেন।

বিকল্প 2: সাধারণ রেল লগগুলি + লোগ্রোটেট

আর একটি বিকল্প হ'ল রেল দ্বারা রেখে যাওয়া লগগুলি তুলতে লোগ্রোটেটটি কনফিগার করা। উবুন্টু এবং ডেবিয়ান উপর হতে দেওয়া হতো, উদাহরণস্বরূপ, নামক একটি ফাইলে /etc/logrotate.d/rails_example_com

/path/to/rails.example.com/tmp/log/*.log {
    weekly
    missingok
    rotate 52
    compress
    delaycompress
    notifempty
    copytruncate
}

নীচে দেওয়া পরামর্শ অনুসারে copytruncate, রেলগুলিতে রেল অ্যাপ্লিকেশনটি পুনরায় আরম্ভ করা এড়াতে, রেলগুলিতে এটি ব্যবহার করার পরামর্শ দেওয়া হচ্ছে।

সম্পাদনা করুন: "শেয়ারডস্ক্রিপ্টস / এন্ডস্প্রিপ্ট" অপসারণ করা হয়েছে কারণ এগুলি এখানে ব্যবহার করা হয় না এবং মন্তব্য অনুসারে সমস্যা সৃষ্টি করে। create 640 root admপ্রস্তাবিত মন্তব্য অনুসারে সরানো হয়েছে।


3
লোগ্রোটেট ব্যবহার করার জন্য, কনফিগারেশন / পরিবেশ / প্রোডাকশন.rb এ থাকা "config.logger = SyslogLogger.new" লাইনটি কি মন্তব্য করা উচিত, বা এটি কি নিঃশর্ত হওয়া উচিত?
রবার্টব্র্যাবফোর্ড

2
এটি মন্তব্য করা উচিত, যাতে লগ ফাইলগুলি লিখিত হয় (উদাহরণস্বরূপ): /var
www/myrailsapp/cटका/

3
যদি logrotateসমাধানটি ব্যবহার করে থাকেন তবে এটি @ অ্যামিট-স্যাক্সেনার জবাবটি মূল্যবান - নির্দেশের copytruncateওপরে ব্যবহারের পরামর্শ দেয় create
টম হ্যারিসন

3
যখন আপনি ব্যবহার copytruncate, create, কোনো প্রভাব নেই তাই আপনি সম্ভবত আপনার উদাহরণ থেকে আমায় সরাতে হবে
মাইকেল Witrant

3
আপনাকে su your_rails_user your_rails_groupআপনার লগ ফাইলগুলির মালিক এবং গোষ্ঠীর সাথে লাইন যুক্ত করতে হতে পারে (যেমন, রেল / যাত্রী প্রক্রিয়াটির) বা (সাম্প্রতিক সংস্করণ?) লোগ্রোটেট অনুমতি সম্পর্কে অভিযোগ করতে পারে।
oseiskar

56

আপনি যদি লোগ্রোটেট ব্যবহার করে থাকেন তবে আপনি /etc/logrotate.d/ ডিরেক্টরিতে একটি কনফ ফাইল ফাইল রেখে নীচের প্রদর্শিত বিকল্পগুলির মধ্যে যে কোনও একটি চয়ন করতে পারেন।

# Rotate Rails application logs based on file size
# Rotate log if file greater than 20 MB
/path/to/your/rails/applicaton/log/*.log {
    size=20M
    missingok
    rotate 52
    compress
    delaycompress
    notifempty
    copytruncate
}

অথবা

# Rotate Rails application logs weekly
/path/to/your/rails/applicaton/log/*.log {
  weekly
  missingok
  rotate 52
  compress
  delaycompress
  notifempty
  copytruncate
}

দয়া করে নোট করুন যে কপিরাইটঙ্কট বর্তমান লগের একটি ব্যাকআপ অনুলিপি তৈরি করে এবং তারপরে অবিরত লেখার জন্য লগ ফাইল সাফ করে। বিকল্পটি হ'ল তৈরি ব্যবহার করুন যা বর্তমান ফাইলটির নাম পরিবর্তন করে এবং তারপরে পুরানো ফাইলের মতো একই নামের সাথে একটি নতুন লগ ফাইল তৈরি করে rot আমি দৃ strongly়ভাবে প্রস্তাব দিচ্ছি যে আপনি কপিরাইটআরঙ্কেট ব্যবহার করবেন যদি না জানেন যে আপনার তৈরির প্রয়োজন। এর কারণটি হ'ল রেলগুলি এখনও পুরানো লগ ফাইলের দিকে ইঙ্গিত রাখতে পারে যদিও এর নাম পরিবর্তন হয়েছে এবং নতুন লগ ফাইলটি সনাক্ত করতে তাদের পুনরায় আরম্ভের প্রয়োজন হতে পারে। অ্যাক্টিভ ফাইলের মতো একই ফাইলটি রেখে কপিরআরঙ্কেট এড়িয়ে চলে।


কিন্তু আমি কি প্রতিবার লোগ্রোটেটে রেলগুলি পুনরায় চালু করব না?
lzap

2
একটি অনুলিপি তৈরি করার পরে পুরানো লগ ফাইলটি সরানো এবং allyচ্ছিকভাবে একটি নতুন তৈরি করার পরিবর্তে মূল লগ ফাইলটি কেটে ফেলুন, এটি ব্যবহার করা যেতে পারে যখন কোনও প্রোগ্রামের লগফিলটি বন্ধ করতে বলা না যেতে পারে এবং এভাবে লেখার (যোগ করা) চালিয়ে যেতে পারে পূর্ববর্তী লগ ফাইল চিরকালের জন্য। নোট করুন যে ফাইলটি অনুলিপি করা এবং এটি কেটে ফেলার মধ্যে একটি খুব অল্প সময়ের স্লাইস রয়েছে, যাতে কিছু লগিংয়ের ডেটা হারাতে পারে। এই বিকল্পটি ব্যবহার করা হলে, পুরানো লগ ফাইলটি স্থির থাকায় তৈরি বিকল্পটির কোনও প্রভাব পড়বে না।
lzap

1
আপনি অনুলিপি ব্যবহার করছেন যদি আপনার রেল পুনরায় আরম্ভ করার প্রয়োজন হয় না কারণ এটি এখনও একই লগ ফাইলের দিকে নির্দেশ করে।
amit_saxena

লগগুলি কখন ঘোরানো হবে তা কনফিগারেশনটিতে আপনাকে কী বলা দরকার? যেমন "সাপ্তাহিক" বা "আকার = 20 এম"? অথবা আপনি যদি বাদ দিতে পারেন তবে আপনি কেবল লোগ্রোটেট ম্যানুয়ালি চালাতে চান?
দামায়মানমান

1
আমি আপনার প্রশ্নটি সঠিকভাবে বুঝতে পেরেছি কিনা তা নিশ্চিত নই, তবে আপনাকে অটো লগ রোটেশনের জন্য একটি মানদণ্ড নির্দিষ্ট করতে হবে। আপনি যদি এটি স্বয়ংক্রিয়ভাবে না চান, তবে ফাইলটিকে /etc/logrotate.d/ ডিরেক্টরিতে রাখবেন না, এটি অন্য কোনও জায়গায় রাখুন। তারপরে আপনি logrotate --force $CONFIG_FILEনিজে নিজে চালনার জন্য কনফিগার ফাইলের অবস্থান নির্দিষ্ট করে চালাতে পারেন run
amit_saxena

31

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

ডকুমেন্টেশন অনুসারে , আপনি যদি লগ ফোল্ডারের আকার সীমাবদ্ধ করতে চান তবে এটি আপনার পরিবেশ-ফাইলটিতে রাখুন ('વિકાસ.rb' / 'product.rb')।

config.logger = ActiveSupport::Logger.new(config.paths['log'].first, 1, 50 * 1024 * 1024)

এটির সাহায্যে আপনার লগ ফাইলগুলি 50Mb এর চেয়ে বড় কখনও হবে না। আপনি নিজের পছন্দটিতে আকার পরিবর্তন করতে পারেন। দ্বিতীয় প্যারামিটারে '1' এর অর্থ হল 1 historicতিহাসিক লগ ফাইলটি রাখা হবে, সুতরাং আপনার কাছে 100Mb অবধি লগ থাকবে - বর্তমান লগ এবং 50Mb এর পূর্ববর্তী অংশ unk

এই সমাধানের উত্স


2
প্রথম আর্গুমেন্টটি ফাইলের নাম, সহজভাবে বলতে, অর্থাৎ 'লগ / ডেভলপমেন্ট.লগ'। সুতরাং আমি দীর্ঘ, কিন্তু স্বচ্ছ উপায় পছন্দ করব। config.paths['log'].firstআমি রাখার পরিবর্তেRails.root.join('log', "#{Rails.env}.log")
মিখাইল চুপ্রিনস্কি

1
: @ZiaUlRehmanMughal হ্যাঁ, এটা পাগল 4. আমি পাগল 4.2.3 ব্যবহার করছি সঙ্গে কাজ, ভালো কনফিগ সঙ্গে config.logger = ActiveSupport::Logger.new(config.log_file, 1, 20*1024*1024)
ThienSuBS

1
এটি পড়তে আরও সহজ করার জন্য, এটি উল্লেখ করা দরকার যে আপনি অ্যাক্টিভসপোর্ট বাইট এক্সটেনশনের উপর নির্ভর করতে পারেন: এর 50.megabytesমতো 50 * 1024 * 1024তবে এটি বোঝার চেয়েও সহজ। দেখুন ActiveSupport কোর এক্সটেনশন আরো বিস্তারিত জানার জন্য।
পিয়েরে-অ্যাড্রিয়েন

1
কিছু গুগল করার পরে আবার এখানে পেয়েছি (প্রোগ্রামার লাইফ: ডি)। আমি ভাবছিলাম যে লগ ফোল্ডারে সমস্ত লগ ফাইলগুলি ঘোরানোর জন্য আমরা এই লাইনটি কনফিগার করতে পারি? স্পষ্টতই এই লাইনটি কেবল প্রথম লাইনে ঘোরানো হবে।
জিয়া উল রেহমান মোগল

দ্রষ্টব্য যে এটি কেবল আপনাকে লগ / প্রোডাকশন.লগ ফাইলকে Rails.application.config.paths['log'].firstঠিক এই ফাইলটি ফেরত হিসাবে আবর্তিত করবে
ভালচি

5

জন্য পাগল 5 , যদি আপনি দৈনন্দিন লগ ঘূর্ণন চান, আপনি শুধুমাত্র এই প্রয়োজন:

  config.logger = ActiveSupport::Logger.new(config.paths['log'].first, shift_age = 'daily')

ডকুমেন্টেশন অনুযায়ী , আপনি ব্যবহার করতে পারেন daily, weeklyবা monthly


2

প্রতিটি লগের জন্য: রেলস লগ, রপুশ লগ, ... আপনি নিজের কনফিগারেশন ফাইলের পরিষেবাতে এটি ব্যবহার করতে পারেন:

 config.log_file = 'log/rpush.log'
 config.logger = ActiveSupport::Logger.new(config.log_file, 1, 20*1024*1024)

এর অর্থ: বিভক্ত হওয়ার পরে কেবল 1 টি পূর্ববর্তী লগ ফাইল সংরক্ষণ করুন। মূল লগের আকার 20 এমবি এর বেশি কখনও হয় না।


-9

আমার পরিবেশ / product.rb ফাইলে নিম্নলিখিত হিসাবে রেল লগলিয়ারটি ব্যবহার করে লগলিগুলিতে লগগুলি প্রেরণে সক্ষম করুন Enable রেল সংস্করণ 4.1.0

RailsApplication::Application.configure do
require 'logglier'
config.logger = Logglier.new(<https://logs-01.loggly.com/inputs/inputkey>)
log.info("hello from logglier")
end

দয়া করে আমাকে কিছু করার পরামর্শ দিন ... এই কোডটি কাজ করছে না
রিয়া খানা

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