Clojure:
লগিং

কিভাবে:

ক্লোজার জাভার লগিং সুবিধাগুলির উপর নির্ভর করে, কিন্তু আপনি এগুলিতে একটি আদর্শ ক্লোজারের উপায়ে প্রবেশ করতে পারেন। আসুন দেখা যাক আপনি কিভাবে clojure.tools.logging ব্যবহার করতে পারেন, যা বেশ কয়েকটি লগিং ফ্রেমওয়ার্কের উপর একটি সহজ অ্যাবস্ট্র্যাকশন প্রদান করে:

প্রথমে, আপনার project.clj-এ clojure.tools.logging এবং একটি লগিং ইমপ্লিমেন্টেশন যেমন log4j এর জন্য একটি ডিপেন্ডেন্সি যোগ করুন:

:dependencies [[org.clojure/clojure "1.10.3"]
               [org.clojure/tools.logging "1.1.0"]
               [log4j/log4j "1.2.17"]]

এখন, চলুন কিছু বার্তা লগ করি:

(require '[clojure.tools.logging :as log])

(defn compute-answer-to-everything []
  (log/debug "তীব্র গণনা শুরু হচ্ছে...")
  (Thread/sleep 3000) ; দীর্ঘ গণনা অনুকরণ করা হচ্ছে
  (log/info "গণনা সম্পন্ন হয়েছে। উত্তর হলো 42।")
  42)

(compute-answer-to-everything)

আউটপুটে ডিফল্টভাবে DEBUG বার্তাগুলো প্রদর্শিত হবে না, কারণ লগ লেভেলগুলো সাধারণত INFO এ সেট করা থাকে:

INFO  [your-namespace] - গণনা সম্পন্ন হয়েছে। উত্তর হলো 42।

যদি প্রয়োজন হয়, তাহলে আরও বিশদ আউটপুট পেতে log4j.properties ফাইলে লগ লেভেল এবং অ্যাপেন্ডারগুলি কনফিগার করা যায়।

গভীর ডুব

ক্লোজারের clojure.tools.logging বেশ কিছুকাল ধরে আছে এবং ক্লোজার কোড এবং জাভা লগিং জগতের মধ্যে একটি সেতু হিসেবে কাজ করে। ঐতিহাসিকভাবে, জাভা বেশ কয়েকটি ইটারেশন এবং লগিং লাইব্রেরিগুলিতে পার হয়েছে যেমন জাভার নিজস্ব লগিং API, log4j, slf4j, এবং logback.

ক্লোজারে, যদিও আপনি সরাসরি জাভার লগিং ফ্রেমওয়ার্কগুলি ব্যবহার করতে পারেন, clojure.tools.logging আপনার ক্লাসপাথে যেকোনো লগিং ফ্রেমওয়ার্ক খুঁজে পেলে সেটিতে নির্দিষ্টভাবে ডেলিগেট করে, যাতে আপনি একটি নির্দিষ্ট ইমপ্লিমেন্টেশনে ঘনিষ্ঠভাবে বাঁধা না পড়েন। এটি আপনার ক্লোজার কোডকে আরও পোর্টেবল এবং মডুলার রাখতে সাহায্য করতে পারে।

ক্লোজার ইকোসিস্টেমের মধ্যে clojure.tools.logging-এর বিকল্পগুলি লাইব্রেরিগুলির মতো timbre, যা একটি শুদ্ধ ক্লোজার লগিং লাইব্রেরি যা লগ রোটেশন, ফিল্টারিং, এবং বাক্সের বাইরে অ্যাসিঙ্ক্রোনাস লগিং সুবিধাগুলি অফার করে।

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

অবশেষে, যখন লগ স্ট্রাকচারড ডাটা (যেমন JSON) হিসাবে লিখিত হয়, তখন স্ট্রাকচারড লগিং বিবেচনা করুন। বড় মাপের ডিস্ট্রিবিউটেড সিস্টেমগুলিতে দীর্ঘমেয়াদে বিশ্লেষণ এবং প্রক্রিয়াজাতকরণের জন্য এটি অত্যন্ত দরকারী হতে পারে।

আরও দেখুন

আরও জানতে চাইলে, এই সম্পদগুলি দেখুন: