Android Log.v (), Log.d (), Log.i (), Log.w (), Log.e () - প্রত্যেকটি কখন ব্যবহার করবেন?


330

বিভিন্ন LogCatপদ্ধতি হ'ল:

Log.v(); // Verbose
Log.d(); // Debug
Log.i(); // Info
Log.w(); // Warning
Log.e(); // Error

প্রতিটি ধরণের লগিং ব্যবহারের উপযুক্ত পরিস্থিতি কী? আমি জানি যে সম্ভবত এটি সামান্য কিছুটা শব্দার্থবিজ্ঞান এবং সম্ভবত এটি সত্যিই গুরুত্বপূর্ণ নয়, তবে LogCatঅ্যান্ড্রয়েড স্টুডিও এবং একলাইপসে ফিল্টারিংয়ের জন্য , উপযুক্ত সময়ে আমি সঠিক পদ্ধতিগুলি ব্যবহার করছি তা জানতে পেরে ভাল লাগবে।

উত্তর:


725

বিপরীত ক্রমে চলুন:

  • লগ.ই : খারাপ জিনিস যখন হয় তখন এটি। এই ট্যাগটি জায়গাগুলির মতো ক্যাচ স্টেটমেন্টের মতো ব্যবহার করুন। আপনি জানেন যে একটি ত্রুটি ঘটেছে এবং তাই আপনি একটি ত্রুটি লগইন করছেন।

  • লগ ডাব্লুডাব্লু : আপনার যখন সন্দেহজনক কিছু হচ্ছে সন্দেহ হয় তখন এটি ব্যবহার করুন। আপনি পুরোপুরি ত্রুটি মোডে পুরোপুরি নাও থাকতে পারেন তবে আপনি কিছু অপ্রত্যাশিত আচরণ থেকে সেরে উঠতে পারেন। মূলত, স্টাফগুলি লগ করতে এটি ব্যবহার করুন যা আপনি প্রত্যাশা করেননি তবে অগত্যা কোনও ত্রুটি নয়। "হেই, এটি ঘটেছিল এবং এটি অদ্ভুত ,এর মতো ধরণের, আমাদের এটি খতিয়ে দেখা উচিত।"

  • লগ.আই : লগতে দরকারী তথ্য পোস্টকরতে এটিব্যবহার করুন। উদাহরণস্বরূপ: আপনি কোনও সার্ভারের সাথে সফলভাবে সংযোগ স্থাপন করেছেন। সাফল্যের রিপোর্ট করতে মূলত এটি ব্যবহার করুন।

  • লগ.ডি : ডিবাগিংয়ের উদ্দেশ্যেএটি ব্যবহার করুন। আপনি যদি একটি গোছা বার্তা মুদ্রণ করতে চান যাতে আপনি আপনার প্রোগ্রামের সঠিক প্রবাহটি লগ করতে পারেন, এটি ব্যবহার করুন। আপনি যদি পরিবর্তনশীল মানগুলির লগ রাখতে চান তবে এটি ব্যবহার করুন।

  • লগ.ভি : আপনি যখন লগিংয়ের সাথে একেবারে বাদাম যেতে চান তখন এটি ব্যবহার করুন। যদি কোনও কারণে আপনি আপনার অ্যাপ্লিকেশনের একটি নির্দিষ্ট অংশে প্রতিটি ছোট জিনিস লগ করার সিদ্ধান্ত নিয়েছেন তবে লগ.ভ্যা ট্যাগটি ব্যবহার করুন।

এবং একটি বোনাস হিসাবে ...

  • লগ.ইউটিএফ : যখন জিনিসগুলি একেবারে, ভয়াবহভাবে, পবিত্র-ক্র্যাপগুলিতে ভুল হয়ে যায় তখন এটি ব্যবহার করুন। আপনি সেসব ব্লকগুলি জানেন যেখানে আপনি ত্রুটিগুলি ধরছেন যা আপনার কখনই পাওয়া উচিত নয় ... হ্যাঁ, আপনি যদি লগ করতে চান তবে লগ.ইউটিএফ ব্যবহার করুন

Log.v Verboseলগ করার জন্য । আপনি যখন প্রতিটি সম্ভাব্য লজিকাল ক্রিয়াকলাপ আউটপুট করতে চান আপনি এটি ব্যবহার করেন।
স্লেটন

2
ওহে বন্ধু! আমি অবশেষে গুগলে নিজেকে কিছু অ্যান্ড্রয়েড কাজ করে দেখছি। কীভাবে জিনিসগুলিতে লগ করা যায় তা বোঝার চেষ্টা করার সময় আমি এটির মধ্যে দৌড়ে গেলাম। :)
রহস্যময়

11
আমি বিশ্বাস Log.wtfকরি না আমি এমনকি কয়েকবার পরীক্ষা করে দেখেছি এবং সত্যিই উচ্চস্বরে হেসেছি .. আমার মতে, সমস্ত এপিআই-এর এই জাতীয় কিছু থাকা উচিত
এমবিএইচ

57
ডাব্লুটিএফ "দাঁড় করানো কি ভয়ঙ্কর ব্যর্থতা"
অভিষেক

8
এই পদ্ধতিটির নাম কে রেখেছেন? এটি একটি ভয়ানক ধারণা। আমি অবাক হয়েছি যে আমি আমার ১ টি অক্ষরের নাম দিয়ে আমার স্টাফটির নাম দিলে আমার দল কীভাবে প্রশংসা করবে? বাজি তারা আমাকে জাহান্নামে পাঠাবে?
সানড্রোক

19

বিভিন্ন পদ্ধতি অগ্রাধিকারের ইঙ্গিত। আপনি তাদের তালিকাবদ্ধ হিসাবে, তারা কমপক্ষে থেকে সবচেয়ে গুরুত্বপূর্ণ যাচ্ছে। আমি মনে করি আপনি কীভাবে আপনার কোডটিতে লগগুলি ডিবাগ করার জন্য তাদের ম্যাপ হিসাবে চিহ্নিত করেছেন তা আপনি যে উপাদান বা অ্যাপ্লিকেশনটিতে কাজ করছেন তার উপর নির্ভর করে অ্যান্ড্রয়েড কীভাবে তাদের সাথে বিভিন্ন বিল্ড ফ্লেভারগুলি (ইঞ্জিন, ইউজারডিগ এবং ব্যবহারকারী) ব্যবহার করে on আমি অ্যান্ড্রয়েডে নেটিভ ডেমোনগুলিতে মোটামুটি কাজ করেছি এবং আমি এটি এইভাবে করি। এটি সরাসরি আপনার অ্যাপ্লিকেশনটিতে প্রয়োগ নাও হতে পারে তবে কিছু সাধারণ কারণ হতে পারে। যদি আমার ব্যাখ্যাটি অস্পষ্ট মনে হয় তবে এর কারণ কিছু একটি বিজ্ঞানের চেয়ে শিল্পের বেশি। আমার বেসিক নিয়মটি যতটা সম্ভব দক্ষ হওয়া, আপনি সিস্টেমের পারফরম্যান্সটি না মেরে যুক্তিসঙ্গতভাবে আপনার উপাদানটি ডিবাগ করতে পারবেন এবং সর্বদা ত্রুটিগুলি পরীক্ষা করে লগ ইন করতে পারেন তা নিশ্চিত করুন।

ভি - বিভিন্ন ব্যবধানে রাষ্ট্রের প্রিন্টআউট, বা আমার সংঘটিত প্রক্রিয়াজাত কোনও ঘটনার উপরে। এছাড়াও সম্ভবত আমার উপাদানগুলি প্রাপ্ত বা প্রেরিত বার্তা / ইভেন্টগুলির পেলডগুলির খুব বিস্তারিত প্রিন্টআউটগুলি।

ডি - আমার উপাদানগুলির মধ্যে ঘটে যাওয়া ছোটখাটো ইভেন্টের বিবরণ এবং সেইসাথে আমার উপাদানগুলি প্রাপ্ত বা প্রেরিত বার্তা / ইভেন্টের পেললোড।

আমি - আমার উপাদানটি প্রাপ্ত বা প্রেরণকারী কোনও বার্তা / ইভেন্টের শিরোনাম, সেইসাথে পে-লোডের কোনও গুরুত্বপূর্ণ টুকরা যা আমার উপাদানটির ক্রিয়াকলাপের জন্য গুরুত্বপূর্ণ।

ডাব্লু - যে কোনও কিছু ঘটে যা অস্বাভাবিক বা সন্দেহজনক তবে ত্রুটিযুক্ত হওয়ার দরকার নেই।

ই - ত্রুটিগুলি, অর্থ এমন জিনিস যা জিনিসগুলি যখন করা উচিত ঠিক তেমন কাজ করার সময় হয় না।

লোকেদের আমি যে সবচেয়ে বড় ভুলটি দেখতে পাচ্ছি তা হ'ল তারা ভি, ডি এবং আই এর মতো জিনিসগুলিকে অতিরিক্ত ব্যবহার করে তবে কখনও ডাব্লু বা ই ব্যবহার করে না If কোনও বার্তা লগ হওয়ার পরে আপনার পক্ষে সস্তা। অন্যদিকে, প্রতিবার যদি আপনি একটি লগ.আই () করেন তবে আপনি ভাগ করে দেওয়া লগিংয়ের সংস্থানটি অপব্যবহার করছেন। অবশ্যই, সাধারণ জ্ঞান ব্যবহার করুন এবং আপনার নিয়ন্ত্রণের বাইরের জিনিসগুলির (যেমন নেটওয়ার্কের ত্রুটি) বা টাইট লুপের মধ্যে থাকা ত্রুটিযুক্ত লগগুলি সম্পর্কে সতর্ক থাকুন be

খারাপ হতে পারে

Log.i("I am here");

ভাল

Log.e("I shouldn't be here");

এই সমস্ত বিষয় মাথায় রেখে, আপনার কোডটি "উত্পাদন প্রস্তুত" -এর কাছাকাছি আসবে, আপনি আপনার কোডের জন্য বেস লগিং স্তরকে তত বেশি সীমাবদ্ধ করতে পারবেন (আপনার আলফায় ভি দরকার হবে, বিটাতে ডি, আমি প্রোডাকশনে বা সম্ভবত উত্পাদনও ডাব্লু) )। আপনার আরও কিছু সাধারণ ব্যবহারের ক্ষেত্রে চলতে হবে এবং লগগুলি দেখতে হবে যাতে আপনি আরও সীমাবদ্ধ ফিল্টারিং প্রয়োগ করার পরে এখনও বেশিরভাগটি ঘটছে তা বুঝতে পারবেন। আপনি যদি নীচের ফিল্টারটি দিয়ে চালান তবে আপনার অ্যাপটি কী করছে তা আপনাকে এখনও বলতে সক্ষম হওয়া উচিত, তবে সমস্ত বিবরণ নাও পেতে পারেন।

logcat -v threadtime MyApp:I *:S

6

উত্স কোড কিছু প্রাথমিক গাইডেন্স প্রদান করে:

কমপক্ষে থেকে বেশিরভাগ ক্ষেত্রে ভারবোসিটির দিক থেকে ক্রমটি হল ERROR, WARN, INFO, DEBUG, VERBOSE। উন্নয়নের সময় ব্যতীত ভার্বোস কখনই কোনও অ্যাপ্লিকেশনে সংকলন করা উচিত নয়। ডিবাগ লগগুলি সংকলন করা হয় তবে রানটাইমের সময় ছিনতাই হয়। ত্রুটি, সতর্কতা এবং তথ্য লগ সর্বদা রাখা হয়।

আরও বিশদের জন্য, কুর্তিসের উত্তর শেষ। আমি কেবল যুক্ত করব: INFO( WARN/ ERROR) বা তার উপরের কোনও ব্যক্তিগতভাবে সনাক্তযোগ্য বা ব্যক্তিগত তথ্য লগ করবেন না । অন্যথায়, বাগ রিপোর্টগুলি বা লগিংয়ের অন্তর্ভুক্ত অন্য যে কোনও কিছু দূষিত হতে পারে।


5

আপনি LOG যেমন ব্যবহার করতে পারেন:

Log.e(String, String) (error)
Log.w(String, String) (warning)
Log.i(String, String) (information)
Log.d(String, String) (debug)
Log.v(String, String) (verbose)

উদাহরণ কোড:

private static final String TAG = "MyActivity";
...
Log.i(TAG, "MyClass.getView() — get item number " + position);

3

আমি মনে করি those বিভিন্ন ধরণের লগিংয়ের মূল বিষয় হ'ল যদি আপনি নিজের অ্যাপটি মূলত নিজস্ব লগগুলি নিজেরাই ফিল্টার করতে চান। সুতরাং ভারবোজ আপনার অ্যাপ্লিকেশনটিতে গুরুত্বের সমস্ত কিছু লগ করতে পারে, তারপরে ডিবাগ স্তরটি ভার্বোজের লগগুলির একটি উপসেট লগ করবে এবং তারপরে তথ্য স্তরটি ডিবাগ লগগুলির একটি উপসেট লগ করবে। আপনি যখন ত্রুটি লগগুলিতে নামেন, তখন আপনি ঘটতে পারে যে কোনও ধরণের ত্রুটি লগ করতে চান। ফ্যাটাল নামে একটি ডিবাগ স্তরও রয়েছে যখন যখন আপনার অ্যাপ্লিকেশনটিতে কোনও কিছু সত্যই ফ্যানকে আঘাত করে।

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


3

যদিও এই প্রশ্নের ইতিমধ্যে উত্তর দেওয়া হয়েছিল আমি অনুভব করি যে উত্তরটি দেওয়া হয়েছিল তার মধ্যে নিখোঁজ উদাহরণ রয়েছে।

অতএব আমি একটি ব্লগ পোস্ট "অ্যান্ড্রয়েড লগ স্তর" এ যা লিখেছি তা এখানে আনব

বাগাড়ম্বরপূর্ণ

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

ডেবাগ্ করা

ডিবাগিং উদ্দেশ্যে হয়। এটি সর্বনিম্ন স্তর যা উত্পাদন করা উচিত। এখানে থাকা তথ্যগুলি বিকাশের সময় সহায়তা করা। বেশিরভাগ সময় আপনি এই লগ উত্পাদনে অক্ষম করবেন যাতে কম তথ্য প্রেরণ করা যায় এবং আপনার যদি সমস্যা হয় তবে কেবল এই লগ সক্ষম করুন। আমি সার্ভার থেকে অ্যাপটি যে সমস্ত তথ্য প্রেরণ / গ্রহণ করে সেগুলি ডিবাগ করতে চাই (পাসওয়ার্ড লগ না করার বিষয়ে যত্ন নিন !!!)। বাগ সার্ভারে বা অ্যাপে রয়েছে কিনা তা বুঝতে এটি খুব সহায়ক very আমি গুরুত্বপূর্ণ ফাংশন প্রবেশ এবং প্রস্থান লগ করা।

তথ্য

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

সতর্কতা

যখন কোনও সম্ভাব্য ক্ষতিকারক পরিস্থিতি হয়।

এই লগটি আমার অভিজ্ঞতায় একটি জটিল স্তর। আপনার কখন সম্ভাব্য ক্ষতিকারক পরিস্থিতি রয়েছে? সাধারণভাবে বা এটি ঠিক আছে বা এটি একটি ত্রুটি। আমি ব্যক্তিগতভাবে এই স্তরটি বেশি ব্যবহার করি না। আমি কখন এটি ব্যবহার করি তার উদাহরণগুলি সাধারণত যখন স্টাফ বেশ কয়েকবার ঘটে থাকে are উদাহরণস্বরূপ, একজন ব্যবহারকারীর 3 বারের বেশি সময় ভুল পাসওয়ার্ড রয়েছে। এটি হতে পারে কারণ তিনি পাসওয়ার্ডটি ভুলভাবে 3 বার প্রবেশ করেছিলেন, এটি এমনও হতে পারে যে কোনও অক্ষর নিয়ে সমস্যা আছে যা আমাদের সিস্টেমে গ্রহণ করা হচ্ছে না। নেটওয়ার্ক সংযোগ সমস্যাগুলির সাথে একই।

ত্রুটি

ত্রুটি ইভেন্ট। অ্যাপ্লিকেশনটি ত্রুটির পরেও চালিয়ে যেতে পারে। এটি উদাহরণস্বরূপ হতে পারে যখন আমি নাল পয়েন্টার পাই যেখানে আমার কোনও পাওয়ার কথা নয়। সার্ভারের প্রতিক্রিয়া পার্স করার সময় একটি ত্রুটি হয়েছিল। সার্ভার থেকে একটি ত্রুটি পেয়েছে।

ডাব্লুটিএফ (কী ভয়ঙ্কর ব্যর্থতা)

মারাত্মক ত্রুটিযুক্ত ইভেন্টের জন্য যা অ্যাপ্লিকেশনটি প্রস্থান করতে পরিচালিত করে। অ্যান্ড্রয়েডে মারাত্মকটি ত্রুটি স্তরটিতে বাস্তবে রয়েছে, পার্থক্যটি এটি সম্পূর্ণ স্ট্যাকটি যুক্ত করে।


2

অ্যান্ড্রয়েড স্টুডিও ওয়েবসাইট সম্প্রতি আছে (আমি মনে করি) কিছু উপদেশ কি বার্তা ধরনের বিভিন্ন লগ মাত্রা যে Kurtis 'উত্তর সহ দরকারী হতে পারে আশা প্রদান করা:

  • ভার্বোজ - সমস্ত লগ বার্তা (ডিফল্ট) দেখান।
  • ডিবাগ - ডিবাগ লগ বার্তাগুলি প্রদর্শন করুন যা কেবল বিকাশের সময় দরকারী, পাশাপাশি এই তালিকার বার্তার স্তর কম থাকে।
  • তথ্য - নিয়মিত ব্যবহারের জন্য প্রত্যাশিত লগ বার্তা, পাশাপাশি এই তালিকার বার্তার স্তর কম দেখান levels
  • সতর্কতা - সম্ভাব্য সমস্যাগুলি দেখান যা এখনও ত্রুটি নয়, পাশাপাশি এই তালিকার বার্তার স্তরও কম lower
  • ত্রুটি - ত্রুটি সৃষ্টি করেছে এমন সমস্যাগুলি দেখান, পাশাপাশি এই তালিকার বার্তার স্তরও নীচে।
  • দৃsert়তা - এমন সমস্যাগুলি দেখান যা বিকাশকারীরা কখনই ঘটবে না বলে আশা করে।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.