自己参考网上代码写了一个logging模块,滚动删除,只保存最近7天的日志,按级别存入不同文件,只需import后,ta_log.XXXX(‘XXXX’)即可。
1.添加配置文件logger_config.ini。首先把该文件放置在/{$项目名}/resource/路径下。
其中配置文件里有:
(1)TimedRotatingFileHandler用来配置log的滚动删除,arg里的“midnight”, 1, 6,’utf-8′ 表示“每一天午夜12点将当天的日志转存到一份新的日志文件中,并且加上时间戳后缀,最多保存6个文件,编码格式UTF-8,支持中文。
(2)如果要同时分别输出到2个文件里和控制台上,那么需要使用三个handler,2个为TimedRotatingFileHandler,还有1个是StreamHandler。
(3)level级别如下,级别越低,打印的日志越详细,例如级别为noset,则会打印出所有信息,如果级别为info,那么不会打印出debug信息。我们的例子中,级别为info,日志里不会打印出debug的信息。
日志等级:使用范围
FATAL:致命错误
CRITICAL:特别糟糕的事情,如内存耗尽、磁盘空间为空,一般很少使用
ERROR:发生错误时,如IO操作失败或者连接问题
WARNING:发生很重要的事件,但是并不是错误时,如用户登录密码错误
INFO:处理请求或者状态变化等日常事务
DEBUG:调试过程中使用DEBUG等级,如算法中每个循环的中间状态
ini配置文件
[loggers]
keys=root
[handlers]
keys=rotatingFileHandler,streamHandler,errorHandler
[formatters]
keys=simpleFmt
[logger_root]
level=DEBUG
handlers=rotatingFileHandler,streamHandler,errorHandler
[handler_rotatingFileHandler]
class=handlers.TimedRotatingFileHandler
level=INFO
formatter=simpleFmt
args=(os.path.abspath(os.getcwd() + "/resource/callrank_log/default.log"),"midnight", 1, 6,'utf-8')
[handler_errorHandler]
class=handlers.TimedRotatingFileHandler
level=ERROR
formatter=simpleFmt
args=(os.path.abspath(os.getcwd() + "/resource/callrank_log/error.log"), "midnight", 1, 6,'utf-8')
[handler_streamHandler]
level=INFO
class=StreamHandler
formatter=simpleFmt
args=(sys.stdout,)
[formatter_simpleFmt]
format=%(asctime)s %(pathname)s(%(lineno)d): %(levelname)s %(message)s
2.编写 globalLog.py 作为全局log的管理入口。后续别的模块下的python文件需要使用日志功能时,需要导入该模块。该模块的原理也很简单,定位到文件路径,然后通过logger的名字获得要用的logger配置,例如我上面的配置文件中
[loggers]
keys=root
所以这里就用了root.然后创建一个全局的logger对象,命名为ta_log。
#globalLog.py
import logging
import logging.config
import os
def get_logger(name='root'):
conf_log = os.path.abspath(os.getcwd() + "/resource/logger_config.ini")
logging.config.fileConfig(conf_log)
return logging.getLogger(name)
ta_log = get_logger(__name__)
3.在需要打印日志的地方使用该方法,例如在main.py里通过ta_log.info()打印日志。该方法会打印各个级别的信息进入两个日志文件中。我们在第四步来看一看日志文件的内容。
Python
import sys
from globalLog import ta_log
if __name__ == '__main__':
ta_log.info("start")
try:
print(1 / 0)
except Exception:
ta_log.error("error:")
ta_log.exception(sys.exc_info())
ta_log.debug("end")
4.运行程序,检查日志文件。
default.log里,级别是info.没有记录ta_log.debug()的信息;
error.log里,级别是error。没有记录ta_log.info()和ta_log.debug()的信息。