Python_logging在多模塊項目中日志輸出應用


  很早之前就想使用log替代print輸出調試信息,簡單使用后一直覺得程序中添加的log代碼是硬代碼,不能隨時全盤調整輸出日志的level。原來之前一直沒有成功的原因是。。。根本沒有仔細了解logging模塊到底有哪些組建和功能。

  今天終於學會了如何將python的日志功能應用到工程中,可以將日志按照不同級別輸出到日志文件和開發工具的控制台console上。

  參考文章:https://blog.csdn.net/langb2014/article/details/53397307

      使用logging模塊的基本套路和原理看上面的文章就行,下文只列出工程目錄、效果、腳本及注意事項

一、目錄結構

二、運行效果

      logdemo.log文件:

2019-06-21 16:21:39,332 - root - DEBUG - debug8 + 12  message:20
2019-06-21 16:21:39,332 - root - INFO - info8 + 12 message:20
2019-06-21 16:21:39,332 - root - WARNING - warning message
2019-06-21 16:21:39,332 - root - ERROR - error8 + 12 message:20
2019-06-21 16:21:39,333 - root - CRITICAL - critical message
2019-06-21 16:21:39,333 - root - INFO - Started
2019-06-21 16:21:39,333 - root - INFO - Doing something
2019-06-21 16:21:39,333 - root - INFO - Finished

 Sublime運行的console輸出:

三、腳本

  1、log.conf           --logs目錄下的logging模塊的配置文件

[loggers]
keys=root,main

[handlers]
keys=consoleHandler,fileHandler

[formatters]
keys=fmt

[logger_root]
level=DEBUG
handlers=consoleHandler,fileHandler 

[logger_main] 
level=DEBUG
qualname=main
handlers=fileHandler

[handler_consoleHandler]
class=StreamHandler
level=INFO
formatter=fmt
args=(sys.stdout,)

[handler_fileHandler]
class=logging.handlers.RotatingFileHandler
level=DEBUG
formatter=fmt
args=('../logs/logdemo.log','a',20000,5,)

[formatter_fmt]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s

  2、run_test_excel.py   --項目入口,主運行文件,調用小弟1號協助產生日志

 1 # run_test_excel.py
 2 import time,sys
 3 import logging 
 4 from logging import config
 5 from logs.myapp import main
 6 
 7 class run_testcase:
 8     def __init__(self):
 9         logging.config.fileConfig("../logs/log.conf",disable_existing_loggers=False)
10         logger = logging.getLogger("simpleExample")
11     def add(self,d1,d2):
12         logging.debug('debug%s + %s  message:%s'%(d1,d2,d1+d2))
13         logging.info('info%s + %s message:%s'%(d1,d2,d1+d2))
14         logging.warning('warning message')
15         logging.error('error%s + %s message:%s'%(d1,d2,d1+d2))
16         logging.critical('critical message')
17         main()
18         return d1+d2
19 if __name__ == '__main__':
20     run = run_testcase()
21     run.add(8,12)

  3、myapp.py   --協助多模塊日志輸出功能的小弟1號,調用小弟2號協助產生日志

 1 # myapp.py
 2 import logging
 3 from logging import config
 4 from logs import mylib
 5 
 6 def main():
 7     logging.info('Started')
 8     mylib.do_something()
 9     logging.info('Finished')
10 
11 if __name__ == '__main__':
12     main()

  4、mylib.py   --協助多模塊日志輸出功能的小弟2號    

1 # mylib.py
2 import logging
3 
4 def do_something():
5     logging.info('Doing something')

 注意事項:

    1、日志檢索異常raise KeyError(key),KeyError: 'formatters' 

     原因:很有可能是主函數logging.config.fileConfig("../logs/log.conf",xxx)時,log.conf路徑錯誤,找不到配置文件,會報此錯誤

    2、本文只是個簡單Demo,如果涉及到多線程,可能會產生日志輸出和保存異常,本Demo暫時驗證不了。

 

總之:以上就是 Python使用logging模塊,在項目中多模塊調用產生日志同時輸入到1個日志文件且輸出到編輯工具console上的全部內容。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM