পাইথনের ডিটবিউজি স্তরে রুট লগার সেট করা আছে কিনা তা নির্ধারণ করা হচ্ছে?


93

যদি আমি লগিং মডিউলটি এই জাতীয় কমান্ড লাইন প্যারামিটার দিয়ে DEBUG তে সেট করি:

if (opt["log"] == "debug"):
  logging.basicConfig(level=logging.DEBUG)

লগারটি DEBUG এ সেট করা থাকলে আমি কীভাবে পরে বলতে পারি? আমি একটি ডেকরেটার লিখছি যা যদি সত্যিকারের পতাকাটি পাঠানো হয় তবে কোনও ফাংশনের সময় আসবে, এবং যদি কোনও পতাকা দেওয়া না হয়, যখন রুট লগারটি ডিইবিইউজে সেট করা থাকে তখন এটি মুদ্রণের সময় সংক্রান্ত তথ্যকে ডিফল্ট করে দেয়।


আপনি অবশেষে লগারে এটি সংযুক্ত করার পরিবর্তে নির্দিষ্ট কিছু ব্যবহার করতে চাইবেন, যেমন অপ্ট ["সময়_কাজ" "] (যা আপনি অন্য কোনও বিকল্পের ভিত্তিতে সত্য / মিথ্যাতে ডিফল্ট করতে পারেন)।

উত্তর:


117
logging.getLogger().getEffectiveLevel()

logging.getLogger() যুক্তি ছাড়াই মূল স্তরের লগার পায়।

http://docs.python.org/library/logging.html#logging.Logger.getEffectiveLevel


দুর্দান্ত, ধন্যবাদ! আমি (getLogger করার স্পষ্ট "মূল" পাশ করার ব্যতীত) ওই জাতীয় কিছু করছেন, কিন্তু আমি এটা করছিলাম Init আমার প্রসাধক এর ফাংশন, আগে এটির ডিবাগ সেট হয়েছিল: \
GCT

4
আপনি যদি স্তরের নামটি চান না, সংখ্যা চান, আপনি এই সংখ্যাটি একটি স্ট্রিংতে রূপান্তর করতে ব্যবহার করতে পারেন ('INFO' এর মতো): লগিং.জেটলিভেলনেম ()
গেটলি

4
@ Guettli, getLevelName () এর একটি স্তরের একটি আর্গুমেন্ট দরকার যার পাঠ্য উপস্থাপনা আপনি পেতে চান। তাই কল আসলে এই জন্তু হল: logging.getLevelName(logging.getLogger().getEffectiveLevel())। আপনার চাইলে বর্তমান স্তরের স্ট্রিং যখন হয় তখন একটি সরল বাক্য গঠনগুলি তৈরি করা ভাল।
ট্রুটান

স্তরের পূর্ণসংখ্যাটিকে নামের সাথে রূপান্তর করতে: docs.python.org/3/library/logging.html#levels
এডিডি TheB

107

আসলে, এর চেয়ে আরও ভাল একটি রয়েছে: কোডটি ব্যবহার করুনlogging.getLogger().isEnabledFor(logging.DEBUG) । ফলাফলটি দিয়ে কী করা যায় তা বোঝার চেষ্টা করার সময় আমি এটি খুঁজে পেয়েছি getEffectiveLevel()

নীচে লগিং মডিউলটি নিজে ব্যবহার করে এমন কোড রয়েছে।

def getEffectiveLevel(self):
    """
    Get the effective level for this logger.

    Loop through this logger and its parents in the blogger hierarchy,
    looking for a non-zero logging level. Return the first one found. 
    """
    logger = self
    while logger:
        if logger.level:
            return logger.level
        logger = logger.parent
    return NOTSET

def isEnabledFor(self, level):
    """
    Is this logger enabled for level ‘level’?
    """
    if self.manager.disable >= level:
        return 0
    return level >= self.getEffectiveLevel()

4
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত, যেহেতু এটি নিম্ন রানটাইম জটিলতায় একই কাজ করে।
অ্যান্ডি জাস্ট

4
এটি যদি কোনও চিত্র না হয়ে আসল কোড হয়। তবুও: upvated।
কায়সার

3

ঠিক

logging.getLogger().level == logging.DEBUG


@ ভিনিথসাই, স্থির ধন্যবাদ!
কেলুং
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.