logging.info কনসোলে প্রদর্শিত হবে না তবে সতর্ক করবে এবং ত্রুটি করবে


94

আমি যখন ইভেন্টটি লগ করি তখন logging.infoপাইথন টার্মিনালে উপস্থিত হয় না।

import logging
logging.info('I am info')  # no output

বিপরীতে, লগ ইন করা ইভেন্টগুলি logging.warnটার্মিনালে উপস্থিত হয়।

import logging
logging.warn('I am warning')  # outputs "I am warning"

logging.infoকনসোলে মুদ্রণ করতে পারি এমন পরিবেশ স্তরের কোনও পরিবর্তন আছে কি ? আমি প্রতিটি পাইথন ফাইলে পরিবর্তন এড়াতে চাই।

উত্তর:


157

মূল লগার সর্বদা সতর্কতা স্তরে ডিফল্ট থাকে। কল করার চেষ্টা করুন

logging.getLogger().setLevel(logging.INFO)

এবং আপনি ভাল করা উচিত।


4
না, আপনাকে কেবল একবার এটি কল করতে হবে। লগারটি একটি শ্রেণিবিন্যাস হিসাবে নির্মিত হয় এবং সমস্ত লগিং একটি মূল লগারে ফোটে । এতে কোনও যুক্তি নির্দিষ্ট না করে getLogger()এটি আপনাকে মূল লগার ফিরিয়ে দিচ্ছে। যতক্ষণ না আপনি অন্যান্য লগারগুলি সংশোধন করেন আপনার কেবলমাত্র রুট লগারটি পরিবর্তন করতে হবে।
Ztyx

18
আপনি কি জানেন যে লগিং.বাসিক কনফিগ (স্তর = লগিং.আইএনএফও) কাজ করে না কেন? আমি ডকুমেন্টেশনে এটি পরিষ্কার দেখতে পাচ্ছি না।
ডোপেলগ্র্যাঞ্জার

4
@ P1h3r1e3d13 আপনার যদি কেবলমাত্র একটি একক রুট লগার থাকে যা সম্ভবত সেরা-অনুশীলন হয়, হ্যাঁ।
Ztyx

7
এটি পাইথন 3.5 তে কাজ করে না:Python 3.5.2 (default, Nov 12 2018, 13:43:14) [GCC 5.4.0 20160609] on linux >>> import logging >>> rootLog = logging.getLogger() >>> rootLog.setLevel(logging.INFO) >>> rootLog.info('all the kings horses') >>> rootLog.warning('all the kings men') all the kings men
জেফ কে

6
@ জেফ্ক, আমার সাথে একই 3.6.8 সেট লেভেলটি লগিংয়ের জন্য সেট করা অবস্থায়ও তথ্য বার্তা প্রিন্ট করে না IN INFO
রবার্ট লগ

28

@ জাইটিএক্সের মতো বলেছে যে ডিফল্ট লগার স্তরটি সতর্কতা। আপনি এটি একটি নিম্ন স্তরে সেট করতে হবে

আপনি এটি logging.basicConfig ব্যবহার করে এবং লগার স্তর নির্ধারণ করে করতে পারেন :

logging.basicConfig(level=logging.DEBUG)

7
আমি ভাবছি কেন basicConfig()আমার পক্ষে কাজ করে না, যদিও logging.getLogger().setLevel()উপযুক্তভাবে কাজ করে?
শায়ান আমানী

17

উপরে সমাধান আমার জন্য কাজ না কিন্তু কোড এখানে যা করেছে:

# set up logging to file
logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
                    datefmt='%m-%d %H:%M',
                    filename='/temp/myapp.log',
                    filemode='w')
# define a Handler which writes INFO messages or higher to the sys.stderr
console = logging.StreamHandler()
console.setLevel(logging.INFO)
# add the handler to the root logger
logging.getLogger('').addHandler(console)

(আমি পঠনযোগ্যতার জন্য কোডের কিছু অংশ বাদ দিয়েছি)


4
এটিই আমার পক্ষে কাজ করেছে। আমি একটি লাইন ছিল logging.error("Connection timed out!")এবং এমনকি সঙ্গে level=logging.DEBUGমধ্যে basicConfig(), এটা কনসোলে প্রিন্ট করা হবে না। হ্যান্ডলার যুক্ত করে দিয়েছিলেন, অনেক অনেক ধন্যবাদ !!
ব্রুসওয়েইন

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

এখানেও একই - যদি আমি স্তর আর্গুমেন্টটি বাদ দিয়ে basicConfigবা এটি INFO এর উপরে সেট করে রাখি তবে কনসোল লগার কখনই কোনও কিছুতে লগইন করতে পারে না। যদি আমি বাইরে চলে যাই তবে আমি সমস্ত দিন লগারে basicConfigকল করতে পারি setLevel(এবং আমি কল করে স্তরের পরিবর্তনটি দেখতে পারি getEffectiveLevel) তবে এটি কখনও WARNINGস্তরের নীচে লগইন করতে পারে না । আমি আসলে নিশ্চিত নই যে এটি সঠিক আচরণ নয় তবে এটি আমার প্রত্যাশা ছিল না।
হাল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.