|
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')
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
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 |