python中日志配置与使用[1]

和在学校做大作业、毕业设计不同,代码一旦到了生产环境,查找问题、服务监控等操作都需要通过日志来完成了。以前的项目,更多的是从其他同事手中交接一些服务,服务中已经积攒了一些(无论好坏)打日志的规范和方法。

 

近期(其实已经一年了,一直懒得总结)由于排期问题,我糙猛快的写了几个python的服务;而我之前的同事里,是没有人使用py来做项目的,所以总结了一下python中使用日志的使用方式、配置文件的编写,以及一些`helper`方法。

 

日志的存储

 

储存日志的方式是多种多样: 使用网络的、使用文件的、还有使用mongo的。由于公司惯例,全部日志都会打到文件里,然后使用 「年月日时」的方式做为文件名 -- 这是一个好习惯,能够很好的控制日志文件体积,也能在查找问题时快速定位日志; 同时让日志的备份与删除变得容易,只要使用对应的「date」操作就可以完成;还可以根据日志量粗略判断服务压力变化(我知道你们有监控,谁没有呢)。

 

增加日志

 

在python中,最简单地使用日志的方式是这样了:

 

#! /usr/bin/env python

import logging as lg

if __name__ == '__main__':
    lg.warning('this is a warning')

 

这时,打印出来的日志,就会打印到终端(还没有写到文件里)。如果想写到文件,你需要增加一些配置:

 

#! /usr/bin/env python

import logging as lg

if __name__ == '__main__':
    lg.basicConfig(filename='pylog.log')
    lg.warning('this is a warning')

 

重新执行这个文件,终端的输出不见了,文件里面会记录你增加的日志。这样,你就可以使用grep、sed和awk来处理日志,查找响应的信息了。

 

`basicConfig`还有一些参数可以设置: filename, filemode, format, datefmt, level, stream。 配合不同的日志等级,这种使用方式可以满足绝大多数脚本的需求。

 

LogLevel

如果你用过gcc,那你一定忽略warning而不能无视error。在程序中也是一样: 有一些错误是需要你注意的,比如缓存容量已经使用了70%,需要你手动干预;一些错误需要你起床来处理的,比如db无法连接。人工去过滤这些信息是不可能的,所以需要合理的使用log level,来完成对应的操作。

 

python自带的logging提供了debug、info、warning、error和critical五种不同的日志级别,用来区分不同的场景。五种级别,严重成都递增,且设置loglevel后(翻到上面,看看baseConfig的介绍),会屏蔽低优先级的日志(也就是说,如果你设置log level为warning,那么info日志就不会出现在日志文件中)。详细介绍在 https://docs.python.org/2/howto/logging.html 。在我日常的使用中,是这样设置loglevel的:

  • 开发环境,debug
  • 线下联调,info
  • 线上环境,warning

配合合理的优先级,当你需要查找某类日志时,只需要这么做:

写道
-> % cat pylog.log | grep '^W'
WARNING:root:this is a warning

 

 

到目前为止,简单介绍了日志的使用和分级,后续会介绍生产环境中的一些常用配置,和一些helper方法。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值