我在使用python的日誌記錄時遇到了一些困難。我有兩個文件,main.py和mymodule.py。通常運行main.py,它會導入mymodule.py並使用一些函數。但有時候,我會直接運行mymodule.py。python日誌記錄 - 消息沒有顯示在子裏
我試圖讓日誌只配置在1個位置,但有些東西似乎是錯誤的。
這是代碼。
# main.py
import logging
import mymodule
logger = logging.getLogger(__name__)
def setup_logging():
# only cofnigure logger if script is main module
# configuring logger in multiple places is bad
# only top-level module should configure logger
if not len(logger.handlers):
logger.setLevel(logging.DEBUG)
# create console handler with a higher log level
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(levelname)s: %(asctime)s %(funcName)s(%(lineno)d) -- %(message)s', datefmt = '%Y-%m-%d %H:%M:%S')
ch.setFormatter(formatter)
logger.addHandler(ch)
if __name__ == '__main__':
setup_logging()
logger.info('calling mymodule.myfunc()')
mymodule.myfunc()
和導入的模塊:
# mymodule.py
import logging
logger = logging.getLogger(__name__)
def myfunc():
msg = 'myfunc is being called'
logger.info(msg)
print('done with myfunc')
if __name__ == '__main__':
# only cofnigure logger if script is main module
# configuring logger in multiple places is bad
# only top-level module should configure logger
if not len(logger.handlers):
logger.setLevel(logging.DEBUG)
# create console handler with a higher log level
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(levelname)s: %(asctime)s %(funcName)s(%(lineno)d) -- %(message)s', datefmt = '%Y-%m-%d %H:%M:%S')
ch.setFormatter(formatter)
logger.addHandler(ch)
logger.info('myfunc was executed directly')
myfunc()
當我運行的代碼,我看到這樣的輸出:
$>python main.py
INFO: 2016-07-14 18:13:04 <module>(22) -- calling mymodule.myfunc()
done with myfunc
但我希望看到這一點:
$>python main.py
INFO: 2016-07-14 18:13:04 <module>(22) -- calling mymodule.myfunc()
INFO: 2016-07-14 18:15:09 myfunc(8) -- myfunc is being called
done with myfunc
有人有任何想法爲什麼第二個logging.info調用不打印到屏幕?提前致謝!
謝謝,但它似乎仍然沒有工作。在創建記錄器obj之前,我將日誌記錄級別設置爲INFO。像這樣 logging.basicConfig(level = logging.INFO) logger = logging.getLogger(__ name__) 然後在setup_logging中,我添加了ch處理程序,並具有一定的調試級別。然後在mymodule裏面,我添加了一個logger.debug語句。當我調用main.py時,mymodule中的調試消息不顯示。 – box