উত্তর:
অবশ্যই, চেক formatters ডক্স লগ-ইন হবে। বিশেষত লিনেনো এবং পথের নাম ভেরিয়েবল।
% (পথনাম) গুলি উত্স ফাইলটির সম্পূর্ণ পথের নাম যেখানে লগিং কল ইস্যু করা হয়েছিল (যদি উপলভ্য থাকে)।
% (ফাইলের নাম) গুলি পথের ফাইলের নাম অংশ।
% (মডিউল) গুলি মডিউল (ফাইলের নামের অংশ)।
% (funcName) s লগিং কলযুক্ত ফাংশনের নাম।
% (লিনেনো) d সোর্স লাইন নম্বর যেখানে লগিং কল জারি করা হয়েছিল (যদি উপলভ্য থাকে)।
এরকম কিছু দেখাচ্ছে:
formatter = logging.Formatter('[%(asctime)s] p%(process)s {%(pathname)s:%(lineno)d} %(levelname)s - %(message)s','%m-%d %H:%M:%S')
উপরে Seb এর খুব দরকারী উত্তর , এখানে কুশলী কোড স্নিপেট যে একটি যুক্তিসঙ্গত ফর্ম্যাটের সাথে এটির ব্যবহার প্রমান হল:
#!/usr/bin/env python
import logging
logging.basicConfig(format='%(asctime)s,%(msecs)d %(levelname)-8s [%(filename)s:%(lineno)d] %(message)s',
datefmt='%Y-%m-%d:%H:%M:%S',
level=logging.DEBUG)
logger = logging.getLogger(__name__)
logger.debug("This is a debug log")
logger.info("This is an info log")
logger.critical("This is critical")
logger.error("An error occurred")
এই আউটপুট উত্পন্ন:
2017-06-06:17:07:02,158 DEBUG [log.py:11] This is a debug log
2017-06-06:17:07:02,158 INFO [log.py:12] This is an info log
2017-06-06:17:07:02,158 CRITICAL [log.py:13] This is critical
2017-06-06:17:07:02,158 ERROR [log.py:14] An error occurred
উপরের দিকে এমনভাবে গড়ে তুলতে যাতে ডিবাগ লগিংকে স্ট্যান্ডার্ড আউটে প্রেরণ করা হয়:
import logging
import sys
root = logging.getLogger()
root.setLevel(logging.DEBUG)
ch = logging.StreamHandler(sys.stdout)
ch.setLevel(logging.DEBUG)
FORMAT = "[%(filename)s:%(lineno)s - %(funcName)20s() ] %(message)s"
formatter = logging.Formatter(FORMAT)
ch.setFormatter(formatter)
root.addHandler(ch)
logging.debug("I am sent to standard out.")
উপরেরটি নামক কোনও ফাইলে debug_logging_example.pyরাখলে আউটপুট তৈরি হয়:
[debug_logging_example.py:14 - <module>() ] I am sent to standard out.
তারপরে আপনি যদি লগিং মন্তব্য বন্ধ করতে চান root.setLevel(logging.DEBUG)।
একক ফাইলের জন্য (উদাহরণস্বরূপ শ্রেণি নিয়োগ) আমি print()বিবৃতি ব্যবহারের বিপরীতে এটি করার আরও অনেক ভাল উপায় খুঁজে পেয়েছি । যেখানে এটি জমা দেওয়ার আগে আপনাকে একক জায়গায় ডিবাগ আউটপুট বন্ধ করতে দেয়।
পাইচার্ম বা এক্লিপ্স পাইদেব ব্যবহার করে ডেভসের জন্য, নিম্নলিখিতটি কনসোল লগ আউটপুটে লগ স্টেটমেন্টের উত্সের লিঙ্ক তৈরি করবে:
import logging, sys, os
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG, format='%(message)s | \'%(name)s:%(lineno)s\'')
log = logging.getLogger(os.path.basename(__file__))
log.debug("hello logging linked to source")
দেখা অন্ধকার কনসোলে Pydev সোর্স ফাইল হাইপার-লিঙ্ক আর আলোচনা ও ইতিহাসের জন্য।
# your imports above ...
logging.basicConfig(
format='%(asctime)s,%(msecs)d %(levelname)-8s [%(pathname)s:%(lineno)d in
function %(funcName)s] %(message)s',
datefmt='%Y-%m-%d:%H:%M:%S',
level=logging.DEBUG
)
logger = logging.getLogger(__name__)
# your classes and methods below ...
# An naive Sample of usage:
try:
logger.info('Sample of info log')
# your code here
except Exception as e:
logger.error(e)
অন্যান্য উত্তরগুলির ভিন্ন, এটি ফাইলের পুরো পথ এবং ফাংশনটির নাম লগ করবে যা একটি ত্রুটি ঘটেছে। আপনার যদি একাধিক মডিউল এবং এই মডিউলগুলিতে একই নামযুক্ত একাধিক ফাইল যুক্ত একটি প্রকল্প থাকে।