zoukankan      html  css  js  c++  java
  • 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上的全部内容。

  • 相关阅读:
    MVC.Net:Razor指定模板
    Intellij Idea 13:导入openfire源代码
    SharePoint 2013:解决爬网出错的问题
    MySQL:解决MySQL无法启动的问题
    SharePoint 2013:解决添加域名后每次都需要登录的问题
    Android 动画
    android:persistent属性
    ubuntu 安装 open in teminal
    利用python建表
    flask request
  • 原文地址:https://www.cnblogs.com/kuzaman/p/11056381.html
Copyright © 2011-2022 走看看