python大型项目中的日志模块_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 importtime,sys3 importlogging4 from logging importconfig5 from logs.myapp importmain6

7 classrun_testcase:8 def __init__(self):9 logging.config.fileConfig("../logs/log.conf",disable_existing_loggers=False)10 logger = logging.getLogger("simpleExample")11 defadd(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+d219 if __name__ == '__main__':20 run =run_testcase()21 run.add(8,12)

3、myapp.py   --协助多模块日志输出功能的小弟1号,调用小弟2号协助产生日志

1 #myapp.py

2 importlogging3 from logging importconfig4 from logs importmylib5

6 defmain():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 importlogging3

4 defdo_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上的全部内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值