ব্যান্ডগুলি: ব্যতিক্রমের পুরো স্ট্যাক ট্রেস লগইন করা


110

আমি স্ট্যাক ট্রেস লগ ইন করার সঠিক উপায়টি বের করার চেষ্টা করছি। আমি এই লিঙ্কটি পেরিয়ে এসেছি যা জানিয়েছে যে লগার.অরর $ !, $ !. ব্যাকট্রেস হ'ল উপায় কিন্তু এটি আমার পক্ষে কাজ করে না লগ_আরর করে। ডকুমেন্টেশন অনুসারে ত্রুটি পদ্ধতিতে দ্বিতীয় তর্কটি পাস করার পদ্ধতিটি আমি কীভাবে কাজ করব তা দেখতে পাচ্ছি না কারণ রেলগুলি যে রুবি লগার ব্যবহার করে কেবলমাত্র একটি একক যুক্তি গ্রহণ করে।

আশ্চর্যের সাথে (বা নাও হতে পারে) দ্বিতীয় তর্কটি কোনও দোভাষী অভিযোগ ছাড়াই গৃহীত হয়। যাইহোক আমি এতে যে কিছু পাস করি তা উপেক্ষা করা হয়।

আমি কী অনুপস্থিত তা কি কেউ ব্যাখ্যা করতে পারেন? ত্রুটির দ্বিতীয় যুক্তির পক্ষে কোনটি অন্তর্দৃষ্টি এবং এটি কী খাচ্ছে?

উত্তর:


204

আপনি যদি অ্যাক্টিভসপোর্টে বাফার্ডলগার শ্রেণীর উত্সটি দেখেন তবে আপনি দেখতে পাবেন যে দ্বিতীয় যুক্তিটি 'প্রগনাম'। এটি কেবল তখনই ব্যবহৃত হয় যখন প্রথম যুক্তিটি শূন্য হয় এবং আপনি এটির কোনও ব্লক দেননি বা ব্লকটি একটি সত্য-অ-মান দেয়।

সংক্ষেপে, আপনি অতিরিক্ত স্টাফ আউটপুট দ্বিতীয় প্যারামিটার ব্যবহার করতে পারবেন না।

আপনি যা করতে চান তা আরও কিছু অনুরূপ:

begin
  raise
rescue => e
  logger.error e.message
  logger.error e.backtrace.join("\n")
end

আপনার লগিং সেটআপ কীভাবে রয়েছে তার উপর নির্ভর করে ব্যাকট্র্যাসের প্রতিটি লাইনটি পুনরাবৃত্তি করা এবং এটি আলাদাভাবে মুদ্রণ করা ভাল হতে পারে কারণ নির্দিষ্ট লগাররা নিউলাইনগুলি আউটপুট না দেয়, এক্ষেত্রে আপনি যেমন কিছু করতে চান:

begin
  raise
rescue => e
  logger.error e.message
  e.backtrace.each { |line| logger.error line }
end

5
আমি ক্রস-প্ল্যাটফর্মের সামঞ্জস্যতা বজায় রাখতে "\ r \ n" ব্যবহার করে যোগদান করব।
জেমস ওয়াটকিন্স

10
আপনি কি $/পরিবর্তে ব্যবহার করবেন না , ক্রস প্ল্যাটফর্মের সাথে সামঞ্জস্যপূর্ণ হতে? \r\nকেবল কয়েকটি প্ল্যাটফর্মের জন্য সুনির্দিষ্টভাবে রুবিকে এটি যত্ন নিতে দিন ।
vgoff

12
আপনি আপনার বার্তাটি বিভক্ত এবং অপঠনযোগ্য পেতে পারেন কারণ একাধিকবার লগার কল করা থ্রেড নিরাপদ নয়। যদিও লগার নিজেই থ্রেড নিরাপদ। সাধারণত আমি আমার বার্তাকে একটি স্ট্রিংয়ে যোগ দিই তারপরে এটি লগইন করুন।
মোরোজভ 10

সেই সময় লগার লগ এন্ট্রিগুলিতে নতুন লাইনগুলি সমর্থন করে বলে মনে হয় নি, তাই বিভাজন কিন্তু হ্যাঁ, আপনি বেশ সঠিক এবং এই পদ্ধতির সীমাবদ্ধতা সম্পর্কে আপনার সচেতন হওয়া উচিত
ডার্কলিকিউড

+1 @ জ্যাক ওয়াটসন একেবারে অদ্ভুত উত্তর কারণ এটি অ-থ্রেড নিরাপদ। এটি গুরুত্বপূর্ণ বিষয় কারণ আমরা এখানে ওয়েব অ্যাপ্লিকেশন সম্পর্কে কথা বলছি
ইভএলেক্স

16

এই উত্তর।

begin
  raise
rescue => e
  logger.error ([e.message]+e.backtrace).join($/)
end

9
কম বিরামচিহ্ন:Rails.logger.error [e.message, *e.backtrace].join($/)
আর্টম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.