【python】logging模块的使用

之前运行程序用print在控制台输出信息,关闭程序后这些信息就丢失了。当我想比较两种参数设置下的程序性能时,就非常不方便。使用logging模块的一大好处是可以便捷地将这些信息记录到本地文件(同时输出到控制台也是可以的),以便后续处理。
这里贴上我自己测试用的代码,具体细节可以参考http://www.cnblogs.com/dkblog/archive/2011/08/26/2155018.html

将信息记录到本地文件

#test_logging.py
import logging

if __name__ == "__main__":
    logging.basicConfig(filename="test.log",filemode="w",level=logging.DEBUG,
                        format="%(filename)s [line:%(lineno)d] %(message)s")
    name = "mengmengz07"
    s = "good morning~ :{}".format(name)
    logging.info(s)
    logging.debug(s)

test.log中的结果

test_logging.py [line:13] good morning~:mengmengz07

将信息输出到控制台
在logging.basicConfig中不声明filename,filemode即可

#test_logging.py
import logging

if __name__ == "__main__":
    logging.basicConfig(level=logging.DEBUG,
                        format="%(filename)s [line:%(lineno)d] %(message)s")
    name = "mengmengz07"
    s = "good morning~:{}".format(name)
    logging.info(s)

控制台输出:

test_logging.py [line:13] good morning~:mengmengz07

将信息记录在本地文件,并输出到控制台

#test_logging.py
import logging

if __name__ == "__main__":
    logging.basicConfig(filename="test.log",filemode="w",level=logging.DEBUG,
                        format="%(filename)s [line:%(lineno)d] %(message)s")
    console =logging.StreamHandler()
    console.setLevel(logging.INFO)
    formatter = logging.Formatter("[%(levelname)s]line:%(lineno)d %(message)s")
    console.setFormatter(formatter)
    logging.getLogger().addHandler(console)
    name = "mengmengz07"
    s = "good morning~:{}".format(name)
    logging.info(s)
    logging.debug(s)

test.log中的结果

test_logging.py [line:13] good morning~:mengmengz07
test_logging.py [line:14] good morning~:mengmengz07

控制台输出:

[INFO]line:13 good morning~:mengmengz07


2022年更新:
logging模块的好处还在于不用删除调试代码!

import logging

logging.basicConfig(level=logging.INFO, format="[%(filename)s, line %(lineno)d] %(message)s")
省略若干代码
logging.info("你想要输出的info,和print的格式一样")
logging.debug("你想要输出的debug,和print的格式一样")

通过修改logging.basicConfig里的level,就可以控制哪些级别以上的信息会被输出。级别排序是critical > error > warning > info > debug。如果level=logging.INFO,那么logging.debug对应的信息都不会被打印出来。只会打印出logging.info对应的信息。

这样就非常方便了,当我们发布程序的时候,不需要手动删掉那些调试代码,只需要把longging.basicConfig里的level设高。调试的时候,把logging.basicConfig里的level设低。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值