বহু ডালপালাযুক্ত আরো Pythonic লগিং প্যাকেজ নির্মাণ একটি প্রারম্ভিক স্তরের প্রকল্প.
ব্যবহার:
প্রদর্শন কাজ করুন:
>>> আমদানি sys; sys.stderr = sys.stdout
সেটআপ সহজ
আপনার main.py ইন:
>>> আমদানি Twiggy
>>> Twiggy.quick_setup ()
লগিং বার্তা
>>> Twiggy আমদানি থেকে *
প্রধান ইন্টারফেস জাদু লগ:
>>> #doctest করুন: + + উপবৃত্ত
<0x ... এ twiggy.Logger.Logger বস্তুর>
এটা মান মাত্রা ব্যবহার করে, বাক্সের বাইরে কাজ করে:
>>> Log.debug ('আপনি যত্ন নাও হতে পারে')
ডিবাগ: আপনি যত্ন নাও হতে পারে
>>> Log.error ('OMFG! আগুন প্যান্ট!')
ত্রুটি: OMFG! আগুন প্যান্ট!
এটা নতুন স্টাইলের ডিফল্টরূপে, বিন্যাসে স্ট্রিং বিভিন্ন সমর্থন করে বলেন:
>>> Log.info ('আমি {0} পরতে আমার {যেখানে}', 'প্যান্ট', যেখানে = 'পা')
তথ্য: আমি আমার পায়ে প্যান্ট পরতে
ওল্ড স্টাইল যদিও কাজ করে জরিমানা:
>>> Log.options (শৈলী = 'শতাংশ'). তথ্য ('আমি% এর মত', "বাইক")
তথ্য: আমি বাইক মত
হিসাবে টেমপ্লেট না:
>>> Log.options (শৈলী = 'ডলার'). তথ্য ('$ কি বধ', কি = 'কার')
তথ্য: কার হত্যা
আপনি আপনার loggers নাম করতে পারেন:
>>> MyLog = log.name ('Alfredo')
>>> Mylog.debug ('হ্যালো')
ডিবাগ: Alfredo: হ্যালো
কিন্তু নাম বস্তুর কোনও সম্পর্ক নেই; এটা শুধু মানুষের ব্যবহারের জন্য:
>>> MyLog ('Alfredo') log.name হয়
মিথ্যা
Emitting বার্তা
এমিটার্স ঢিলেঢালাভাবে মিলিত হয়:
>>> Twiggy.emitters #doctest: + + উপবৃত্ত
{'*': <0x ... এ twiggy.Emitter.Emitter বস্তুর>}
আপনি এমিটার্স একটি min_level সেট করতে পারেন:
>>> Twiggy.emitters ['*']. Min_level = twiggy.Levels.INFO
>>> Log.debug ("সাহায্য, সাহায্য আমি চাপা করা হচ্ছে")
>>> Log.info ("আমি এখনো বেশ মৃত নই")
তথ্য: আমি এখনো বেশ মৃত নই
আপনি regexes উপর, বা অবাধ ফাংশন সঙ্গে ফিল্টার করতে পারেন:
>>> Twiggy.emitters ['*']. ফিল্টার = ". * প্যান্ট. *"
>>> Log.info ("ফেরার আমার {0} উপর", "প্যান্ট")
তথ্য: আমার প্যান্ট পেয়েছেন
>>> Log.info ("শার্ট" "আমার {0} পেয়েছেন")
এর সব যে রিসেট করা যাক:
>>> Twiggy.emitters ['*']. ফিল্টার = সত্য
>>> Twiggy.emitters ['*']. Min_level = twiggy.Levels.DEBUG
ভাল আউটপুট
নতুন লাইন ডিফল্টরূপে আর দেখানো হয় না; যে প্রতি-বার্তা বন্ধ পরিণত করা যাবে:
>>> Log.info ('ব্যবহারকারী ninput nannoys NUS')
তথ্য: ব্যবহারকারী ninput nannoys NUS
('আমরা ndeal ') .info >>> log.options (suppress_newlines = মিথ্যা)
তথ্য: আমরা
লেনদেন
ব্যতিক্রম অগ্রে যুক্ত করা হয়. এছাড়াও exc_info পাস করতে পারেন. একটি একক লাইন মধ্যে ভাঁজ একটি প্রিফিক্স হিসেবে ' N' ব্যবহার করুন:
>>> ব্যবহার করে দেখুন:
... 1/0
... ছাড়া:
... Log.trace ('ত্রুটি') ('ওহ প্রস্তাবের বিরূদ্ধে ভোট') #doctest সতর্কবার্তা:. + + উপবৃত্ত
সতর্কবার্তা: ওহ প্রস্তাবের বিরূদ্ধে ভোট
ট্রেস ট্রেসব্যাক (সবচেয়ে সাম্প্রতিক কল শেষ):
ট্রেস ফাইল "
ট্রেস 1/0
ট্রেস ZeroDivisionError: শূন্য দ্বারা পূর্ণসংখ্যা বিভাগ বা modulo
পদ্ধতি Chaining
আমি এই শৃঙ্খলিত শৈলী অনেক পছন্দ.
>>> Log.name ('Benito'). তথ্য ('হাই')
তথ্য: Benito: হাই
এটা সহজ কাঠামোগত লগিং তোলে:
>>> Log.fields (পাথ = 42) .info ('একটি হাঁটার জন্য যাচ্ছে')
তথ্য: পাথ = 42: একটি হাঁটার জন্য যাওয়া
ছোট ছোট করে কাটা. রানটাইম পরিসংখ্যান সংগ্রহের জন্য গ্রেট.
>>> Log.struct (পাথ = 42, ডলফিনের = 'কৃতজ্ঞ')
তথ্য: ডলফিনের = কৃতজ্ঞ: পাথ = 42:
আংশিক webapps জন্য উপযোগী হতে পারে বাঁধাই:
>>> Per_request_log = log.fields (request_id = '12345')
>>> Per_request_log.fields (সারি = 100, ব্যবহারকারী = 'ফ্রাঙ্ক'). তথ্য ('ডাটাবেস frobnicating')
তথ্য: request_id = 12345: সারি = 100: ব্যবহারকারী = ফ্রাঙ্ক: frobnicating ডাটাবেস
>>> Per_request_log.fields (বাইট = 5678) .info ('টিউব উপর পাতা পাঠানোর')
তথ্য: বাইট = 5678: request_id = 12345: টিউব উপর পাতা পাঠানোর
শৃঙ্খলিত শৈলী সন্ত্রস্ত:
>>> Log.name ('donjuan'). ক্ষেত্র (প্যান্ট = 'সেক্সি'). তথ্য ("হ্যালো, {যারা} করতে চান {কি}?", যারা = 'রমণীরঁজক, কি =' নাচ ')
তথ্য: donjuan: প্যান্ট = সেক্সি: হ্যালো, মহিলা নাচ করতে চান?
ডায়নামিক
Args / ক্ষেত্রে যে কোন ফাংশন বলা হয় এবং মান substitued হয়:
>>> আমদানি অপারেটিং সিস্টেম
>>> Twiggy.lib আমদানি আলোচনাগাঁথা থেকে
>>> আলোচনাগাঁথা ()
'MainThread'
+ + উপবৃত্ত: ("আমি থ্রেড আছি {0}", আলোচনাগাঁথা) #doctest .info >>> log.fields (PID = os.getpid)
তথ্য: PID = 1076: আমি থ্রেড MainThread আছি
এই আমাদের কিছু শান্ত স্টাফ না চলুন শুরু করা যাক যা আংশিকভাবে বাউন্ড loggers সঙ্গে উপযোগী হতে পারে:
>>> বর্গ ThreadTracker (বস্তু):
... Def __init __ (স্ব, OBJ):
... স্ব .__ OBJ = OBJ
... # একটি আংশিকভাবে আবদ্ধ এটির
... স্ব = log.name ("যে ব্যক্তি অনুসরণ করে") করুন .__. ক্ষেত্র (obj_id = আইডি (OBJ), থ্রেড = আলোচনাগাঁথা)
... স্ব .__ log.debug ("ট্র্যাকিং শুরু")
... Def __ __getattr (স্ব, attr):
... স্ব .__ log.debug ("ব্যবহার {0}", attr)
... ফিরে getattr (স্ব .__ OBJ, attr)
...
>>> বর্গ গুচ্ছ (বস্তু):
... পাস
...
>>> Foo বিন্যাস = গুচ্ছ ()
>>> Foo.bar = 42
>>> ট্র্যাক = ThreadTracker (foo বিন্যাস)
ডিবাগ: যে ব্যক্তি অনুসরণ করে: obj_id = 14063980: থ্রেড = MainThread: ট্র্যাকিং শুরু
>>> Tracked.bar
ডিবাগ: যে ব্যক্তি অনুসরণ করে: obj_id = 14063980: থ্রেড = MainThread: ব্যবহার বার
42
>>> আমদানি থ্রেডিং
>>> T = threading.Thread (টার্গেট = ল্যামডা: tracked.bar * 2, নাম = "TheDoubler")
>>> T.start ()
ডিবাগ: যে ব্যক্তি অনুসরণ করে: obj_id = 14063980: থ্রেড = TheDoubler: ব্যবহার বার
আপনি কি সত্যিই) (এটা একটি callable, repr করুন বা ল্যামডা এটি মোড়ানো করতে চান.
অপ্টিমাইজেশন
একটি অপ্টিমাইজেশান হিসাবে, একটি min_level loggers উপর নির্ধারণ করা যাবে:
>>> Mylog.min_level = twiggy.Levels.INFO
>>> Mylog.info ("আপনি এই দেখুন")
তথ্য: Alfredo: আপনি এই দেখতে
>>> Mylog.debug ("এই লুকানো হয়")
তারা format_spec উপর কাজ করে যে একটি ফিল্টার নিতে. ব্যবহারের ক্ষেত্রে দক্ষতার কিছু মূঢ় করছে সুবিধাসহ আধুনিক লাইব্রেরী কক্ষ নির্দিষ্ট বার্তা বন্ধ শাট:
>>> Mylog.filter = ল্যামডা এর: "shenanigans" না এর মধ্যে
>>> Mylog.info ("মূর্খতা শুরু")
তথ্য: Alfredo: শুরু মূর্খতা
>>> Xrange আমি (3) জন্য: 3 বড় মানের জন্য #
... Mylog.info ("আমি shenanigans কল!")
>>> Mylog.info ("মূর্খতা শেষ")
তথ্য: Alfredo: শেষ মূর্খতা
আবশ্যক
- পাইথন
পাওয়া মন্তব্যসমূহ না