python日志模块

目前有一种需求是启动一个server,记录每天的访问情况,查下了下资料,用python的logging模块可以实现。

具体来说是使用TimedRotatingFileHandler 这个文件处理器,代码如下:

logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)

log_path = "./log/run.log"
fh = logging.handlers.TimedRotatingFileHandler(filename=log_path, when='midnight', backupCount=5)
fh.suffix = "%Y-%m-%d"
fh.setLevel(logging.DEBUG)

fmt = "%(asctime)-15s %(filename)s:%(lineno)d %(levelname)s %(message)s"
datefmt = "%Y-%m-%d %H:%M:%S"
formatter = logging.Formatter(fmt, datefmt)

fh.setFormatter(formatter)
logger.addHandler(fh)

一般通过模块名称获取logger,这样有一种层级关系,可以继承上层模块的设置。

TimedRotatingFileHandler()的第一个参数filename设定日志路径;when设定循环日志的更新时间,一般设置为midnight比较好,即每天凌晨0点更新,网上说设定其他的值会有些坑,时间上会有些不一致;bacupCount设定循环周期内的文件数。

采用上面代码中的设定,运行后会在log目录下创建日志文件run.log,当天产生的日志会输出到这个文件,到凌晨这个文件会变成昨天日期的文件。因为backupCount设置为5,所以最后log目录下会始终保持6个文件:

run.log.2017-06-01
run.log.2017-06-02
run.log.2017-06-03
run.log.2017-06-04
run.log.2017-06-05
run.log

还有很多其他的日志处理器,可以根据不同的用处设定。

另外日志模块还可以涉及多线程,多模块,添加过滤器,从json或yaml文件读取配置等技术点,有需要再深入学习下。

其他参考:

  • http://python.jobbole.com/81666/
  • http://www.jianshu.com/p/feb86c06c4f4
  • https://zhuanlan.zhihu.com/p/21476174

你可能感兴趣的:(python日志模块)