2014-09-02 4 views
2

Я не совсем понял, что такое Python, чтобы понять это самостоятельно, поэтому я прошу помощи.Настройка уровней ведения журнала с использованием переменной

У меня есть различные сообщения о регистрации, разбросанные по всему модулю python. Я хотел бы код, который вызывает модуль, чтобы иметь возможность установить уровень отладки, выполнив:

module.DEBUG = INFO

, например. Но я не могу перевести это на работу. У меня есть глобальная переменная «Debug», и я хотел бы, чтобы это было истолковано в следующей строке, а не DEBUG действовать в качестве символьной строки, которая является то, что я думаю, что происходит:

logging.basicConfig(format='%(levelname)s - %(message)s', level=logging.DEBUG) 

Как я могу сделайте эту строку обработанной как переменную вместо литерала (если это то, что происходит?)

Спасибо!

--Matt

+0

отладка является уровнем. я думаю, вы хотели сказать, что хотите установить уровень ведения журнала – Elisha

+0

logging.DEBUG не является буквальным. это целое число. ('logging.DEBUG == 10') – Elisha

ответ

4

Если вы хотите Вызывающий кода контроля уровня протоколирования на модуле, вы должны рассмотреть вопрос о принятии уровня регистрации в качестве параметра в модуле. Ниже приведен пример кода, как вы можете это сделать:

import logging 

class MyModule(object): 
""" 
Sample module to demonstrate setting of loglevel on init 
""" 

    def __init__(self, logLevel): 
     #logLevel, a string, should be one of the levels of the logging modules. Example: DEBUG, INFO, WARNING etc. 

     #Translate the logLevel input string to one of the accepted values of the logging module. Change it to upper to allow calling module to use lowercase 
     #If it doesn't translate default to something like DEBUG which is 10 
     numeric_level = getattr(logging, logLevel.upper(), 10) 

     logging.basicConfig(filename='example.log', level=numeric_level) 


    def testLogger(self): 
     #logging object that you defined the level in init is used here for some sample logging 
     logging.debug('see this at debug level') 
     logging.info('see this at info and debug') 
     logging.warning('see this at warn, info and debug') 


if __name__ == "__main__": 
    MM= MyModule('info') 
    MM.testLogger() 
Смежные вопросы