flask日志按每日切割

论坛 期权论坛 脚本     
匿名技术用户   2020-12-27 10:58   11   0

app.py

import logging
import json
import time
from datetime import datetime
from logging.handlers import RotatingFileHandler

from flask import Flask, g, request
from flask import jsonify
from handlers import MidnightRotatingFileHandler


app = Flask(__name__)


def register_log():
    fmt =  "%(asctime)s - %(name)s - %(levelname)s - %(message)s"

    if False:
        handler = logging.StreamHandler(sys.stdout)
    else:
        handler = MidnightRotatingFileHandler('access.log')
        # handler = RotatingFileHandler("access1.log", maxBytes=100 * 1024, backupCount=5)

    logging.basicConfig(
        level=logging.DEBUG,
        format=fmt,
        datefmt='%Y-%m-%d %H:%M:%S',
        handlers=[handler]
    )
    logging.getLogger(__name__).setLevel(logging.WARNING)


register_log()

logger = logging.getLogger(__name__)

# 记录日志
@app.route("/")
def index():
    logger.info("123")
    logger.debug("456")
    logger.warning("789")
    logger.error("101112")
    return 'ok'

# 记录带返回参数的日志
@app.route("/json")
def test_json():
    data = {
        "data": 123,
        "name": "fanzone"
    }
    return jsonify(data)


if __name__ == '__main__':
    app.run(debug=True, port=5001)

handlers.py

# coding:utf-8

import codecs
import datetime
import os
from logging.handlers import BaseRotatingHandler


class MidnightRotatingFileHandler(BaseRotatingHandler):
    def __init__(self, filename):
        self.suffix = "%Y-%m-%d"
        self.date = datetime.date.today()
        super(BaseRotatingHandler, self).__init__(filename, mode='a', encoding=None, delay=0)

    def shouldRollover(self, record):
        return self.date != datetime.date.today()

    def doRollover(self):
        if self.stream:
            self.stream.close()
            self.stream = None
        self.date = datetime.date.today()

    def _open(self):
        filename = '%s.%s' % (self.baseFilename, self.date.strftime(self.suffix))
        if self.encoding is None:
            stream = open(filename, self.mode)
        else:
            stream = codecs.open(filename, self.mode, self.encoding)
        if os.path.exists(self.baseFilename):
            try:
                os.remove(self.baseFilename)
            except OSError:
                pass
        try:
            os.symlink(filename, self.baseFilename)
        except OSError:
            pass
        return stream

参考文档:
https://my.oschina.net/lionets/blog/796438

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP