3.1 ইভেন্ট লেভেলের তালিকা
লগিং হল প্রোগ্রাম চলাকালীন ঘটে যাওয়া কোনো ঘটনা রেকর্ড করার প্রক্রিয়া। একজন প্রোগ্রামার হিসাবে আপনার দায়িত্ব record everything important
কারণ তখন, যখন production
অদ্ভুত এবং/অথবা গুরুতর ত্রুটি থাকে, তখন এই লগগুলি ছাড়া আপনার আর কিছুই থাকবে না।
যেকোন ত্রুটি অনেকগুণ দ্রুত মুছে যাবে যদি আপনার কাছে এটি সম্পর্কে এবং কলের সমস্ত ইতিহাস সম্পর্কে সমস্ত তথ্য থাকে। কিন্তু একটি সাধারণ উপসংহার এখান থেকে অনুসরণ করা হয় - সাধারণভাবে সবকিছু লগ করতে: সমস্ত পদ্ধতির কল, সমস্ত প্যারামিটারের মান।
এটিও একটি বিকল্প নয় - খুব বেশি তথ্য খুব কম হিসাবে খারাপ। আমাদের স্মার্ট লগিং দরকার। মানুষের জন্য মানুষের তৈরি। এবং এখানে আমরা লগিং সম্পর্কে প্রথম তথ্যে আসি - লগের সমস্ত এন্ট্রিগুলি তাদের তৈরির সময়েও বিভাগগুলিতে বিভক্ত।

প্রোগ্রামার, লগে একটি ইভেন্ট লেখার সময়, এই তথ্যটি কতটা গুরুত্বপূর্ণ তা নিজের জন্য সিদ্ধান্ত নিতে হবে। ইভেন্টের তীব্রতা স্তর বার্তা লেখক দ্বারা নির্বাচিত হয়. log4j
লগ করা তথ্যের গুরুত্বের 5টি স্তর রয়েছে :
DEBUG
INFO
WARN
ERROR
FATAL
নীচে আমরা তাদের সম্পর্কে আরও বিশদে বলব।
3.2 ডিবাগ
স্তরটি DEBUG
সর্বনিম্ন গুরুত্বপূর্ণ হিসাবে বিবেচিত হয়। এই স্তরের গুরুত্ব সহ লগে লেখা তথ্য শুধুমাত্র অ্যাপ্লিকেশন ডিবাগিংয়ের সময় প্রয়োজন। ডিবাগিংয়ের সময় প্রয়োজনীয় তথ্য লগ করার জন্য, পদ্ধতিটি ব্যবহার করা হয় debug()
।
উদাহরণ:
class Manager {
private static final Logger logger = LoggerFactory.getLogger(Manager.class);
public boolean processTask(Task task) {
logger.debug("processTask id = " + task.getId());
try {
task.start();
task.progress();
task.complete();
return true;
} catch (Exception e) {
logger.error("Unknown error", e);
return false;
}
}
}
মনোযোগ দিন, পদ্ধতিটি debug
পদ্ধতির একেবারে শুরুতে (পদ্ধতিটিতে এখনও কিছু করার সময় নেই) এবং লগে পদ্ধতিতে পাস করা ভেরিয়েবলের মান লিখে। এই পদ্ধতির জন্য এটি সবচেয়ে সাধারণ ব্যবহারের ক্ষেত্রে debug()
।
3.3 তথ্য এবং সতর্কতা
পরবর্তী দুটি স্তর হল INFO
এবং WARN
. তাদের জন্য দুটি পদ্ধতি আছে - info()
এবং warn()
.
স্তরটি INFO
কেবল তথ্যমূলক বার্তাগুলির জন্য ব্যবহৃত হয়: এটি এবং এটি ঘটে। আপনি যখন লগে একটি ত্রুটি পার্স করা শুরু করেন, তখন এটির পটভূমি পড়তে এটি খুব কার্যকর হতে পারে। পদ্ধতিটি এই জন্য নিখুঁত info()
।
স্তরটি WARN
সতর্কতা লিখতে ব্যবহৃত হয় (শব্দ সতর্কীকরণ থেকে )। সাধারণত, এই স্তরের গুরুত্ব সহ, তথ্য লেখা হয় যে কিছু ভুল হয়েছে, তবে প্রোগ্রামটি জানে এই পরিস্থিতিতে কী করতে হবে।
উদাহরণস্বরূপ, ডিস্কে একটি ফাইল লেখার প্রক্রিয়াতে, দেখা গেল যে এই জাতীয় ফাইল ইতিমধ্যেই বিদ্যমান। এখানে প্রোগ্রামটি একটি সতর্কতা (সতর্কতা) লগ করতে পারে, তবে ব্যবহারকারীকে একটি ডায়ালগ বক্স দেখায় এবং একটি ভিন্ন ফাইলের নাম নির্বাচন করার প্রস্তাব দেয়।
উদাহরণ:
class FileManager {
private static final Logger logger = LoggerFactory.getLogger(FileManager.class);
public boolean saveFile(FileData file) {
logger.info(“save the file ” + file.getName());
boolean resultOK = SaveUtils.save(file);
if (resultOK) return true;
logger.warn(“file writing problem ” + file.getName());
String filename = Dialog.selectFile();
boolean result = SaveUtils.save(file, filename);
return result;
}
3.4 ত্রুটি এবং মারাত্মক
অবশেষে, দুটি সবচেয়ে গুরুত্বপূর্ণ লগিং স্তর হল ERROR
এবং FATAL
. তাদের জন্য, একই নামের বিশেষ পদ্ধতি রয়েছে: error()
এবং fatal()
.
তারা ত্রুটিগুলিকে দুটি বিভাগে ভাগ করার সিদ্ধান্ত নিয়েছে - সাধারণ ত্রুটি এবং মারাত্মক ত্রুটি । একটি মারাত্মক ত্রুটি প্রায়শই একটি অ্যাপ্লিকেশন ক্র্যাশ (ডেস্কটপ অ্যাপ্লিকেশনগুলির জন্য) বা একটি ওয়েব পরিষেবা ক্র্যাশ (ওয়েব অ্যাপ্লিকেশনগুলির জন্য) পরিণত হয়।
আরেকটি ভালো উদাহরণ হল উইন্ডোজ অপারেটিং সিস্টেম। যদি আপনার প্রোগ্রামটি ক্র্যাশ হয়ে যায়, তাহলে অপারেটিং সিস্টেমের দৃষ্টিকোণ থেকে, এটি হল Error
. এবং যদি অপারেটিং সিস্টেম নিজেই পড়ে যায় এবং আপনি উইন্ডোজের ব্লু স্ক্রীন দেখতে পান, তবে এটি ইতিমধ্যেই Fatal error
।
জাভা অ্যাপ্লিকেশনগুলিতে, ইভেন্টগুলি প্রায়শই উত্থাপিত ব্যতিক্রমগুলির সাথে যুক্ত থাকে Error
। Fatal
উদাহরণ:
class Manager {
private static final Logger logger = LoggerFactory.getLogger(Manager.class);
public boolean processTask(Task task) {
logger.debug("processTask id = " + task.getId());
try {
task.start();
task.progress();
task.complete();
return true;
} catch (Exception e) {
logger.error("Unknown error", e);
return false;
}
}
}
3.5 কি লগ করবেন
অবশ্যই, এটি একটি সারিতে সবকিছু লগ করার মূল্য নয়। বেশিরভাগ ক্ষেত্রে, এটি লগের পঠনযোগ্যতাকে তীব্রভাবে খারাপ করে দেয় এবং সর্বোপরি, লগটি পড়ার জন্য প্রথম স্থানে লেখা হয়।
এছাড়াও, আপনি লগে বিভিন্ন ব্যক্তিগত এবং আর্থিক তথ্য লিখতে পারবেন না। এখন এটি কঠোরভাবে এবং সহজেই আপনি জরিমানা বা মামলা করতে পারেন। শীঘ্রই বা পরে, এই ধরনের একটি লগ পাশে ফুটা হবে এবং তারপর কোন সমস্যা হবে না।
তাই কি লগ করা উচিত?
প্রথমে, আপনাকে আবেদনের শুরুতে লগ করতে হবে । অ্যাপ্লিকেশন শুরু হওয়ার পরে, এটির অপারেশন মোড এবং বিভিন্ন গুরুত্বপূর্ণ সেটিংস লগ করার সুপারিশ করা হয় - এটি ভবিষ্যতে লগ পড়া সহজ করে তুলবে৷
দ্বিতীয়ত, আপনাকে সমস্ত তৃতীয় পক্ষের পরিষেবাগুলির স্থিতি লগ করতে হবে যার সাথে আপনার অ্যাপ্লিকেশন কাজ করে: মেলিং সিস্টেম, যে কোনও বহিরাগত পরিষেবা৷ ন্যূনতম, তারা সঠিকভাবে কাজ করছে তা নিশ্চিত করতে আপনাকে তাদের সাথে সংযোগের মুহূর্তটি সুরক্ষিত করতে হবে।
তৃতীয়ত, সমস্ত ব্যতিক্রম লগ ইন করতে হবে । যদি তারা প্রত্যাশিত হয়, তাহলে তাদের উপর তথ্য কম্প্যাক্টলি লেখা যেতে পারে। ব্যতিক্রম সম্পর্কে সম্পূর্ণ তথ্য 50%-80% গুরুত্বপূর্ণ তথ্য দেয় যখন একটি বাগ অনুসন্ধান করা হয়।
এছাড়াও আপনাকে অ্যাপ্লিকেশন শাটডাউন লগইন করতে হবে । অ্যাপ্লিকেশনটি অবশ্যই স্বাভাবিকভাবে বন্ধ করতে হবে এবং লগে কয়েক ডজন ত্রুটি ফেলতে হবে না। প্রায়শই এই জায়গায় আপনি আটকে থাকা কাজগুলি, থ্রেড পুলের সমস্যা বা অস্থায়ী ফাইল মুছে ফেলার সমস্যাগুলি খুঁজে পেতে পারেন।
নিরাপত্তা এবং ব্যবহারকারীর অনুমোদন সম্পর্কিত সবকিছু লগ করতে ভুলবেন না । যদি একজন ব্যবহারকারী 10 বার তাদের পাসওয়ার্ড লগইন বা রিসেট করার চেষ্টা করে, তাহলে এই তথ্য লগগুলিতে প্রতিফলিত হওয়া উচিত।
অ্যাসিঙ্ক্রোনাস কাজ সম্পর্কে যতটা সম্ভব তথ্য লগ করুন - এই ধরনের থ্রেডগুলিতে ব্যতিক্রমগুলি প্রায়শই হারিয়ে যায়। একটি অ্যাসিঙ্ক্রোনাস টাস্কের জন্য, এটির শুরু এবং শেষ লগ করতে ভুলবেন না। সফল সমাপ্তি একটি সমস্যাযুক্ত এক হিসাবে একই ভাবে লগ ইন করা উচিত.
আর কি? সময়োপযোগী কাজগুলি চালু করা, সঞ্চিত কাজগুলি চালু করা SQL-procedures
, ডেটা সিঙ্ক্রোনাইজ করা, বিতরণ করা লেনদেনের সাথে সম্পর্কিত সবকিছু। আমি মনে করি এটি একটি শুরুর জন্য যথেষ্ট। আপনি ভবিষ্যতে এই তালিকায় যোগ হবে.
GO TO FULL VERSION