Skip to content
This repository has been archived by the owner on Apr 11, 2019. It is now read-only.

Commit

Permalink
added better logger
Browse files Browse the repository at this point in the history
  • Loading branch information
bcho committed Oct 7, 2013
1 parent c1d4e26 commit 7708ce2
Show file tree
Hide file tree
Showing 5 changed files with 56 additions and 50 deletions.
40 changes: 34 additions & 6 deletions configurations/develop.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,37 @@

SECRET_KEY = 'gdut library rocks'

LOG_FILE = os.path.abspath('logs/app.log')

EMAIL_ENABLE = True
EMAIL_LOGIN = None
EMAIL_PWD = None
EMAIL_DEST = []
LOGGING_CONFIG = {
'formatters': {
'brief': {
'format': '%(levelname)s %(name)s %(message)s'
}
},
'filters': [],
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'formatter': 'brief'
},
'logfile': {
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.abspath('logs/app.debug.log'),
'formatter': 'brief'
}
},
'loggers': {
'app': {
'propagate': True,
'level': 'DEBUG',
'handlers': ['console', 'logfile']
},
'tasks': {
'propagate': False,
'level': 'DEBUG',
'handlers': ['logfile', 'console']
}
},
'disable_existing_loggers': True,
'incremental': False,
'version': 1
}
17 changes: 3 additions & 14 deletions server/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,19 +28,8 @@ def register_blueprint(app):


def register_logging(app):
import logging
from logging.handlers import RotatingFileHandler

log_path = app.config.get('LOG_FILE', 'app.log')
if app.debug:
log_path = log_path + '.debug'

file_handler = RotatingFileHandler(log_path)
file_handler.setLevel(logging.WARNING)
file_handler.setFormatter(logging.Formatter(
'%(asctime)s %(levelname)s: %(message)s '
'[from %(pathname)s:%(lineno)d]'
))
app.logger.addHandler(file_handler)
import logging.config

logging.config.dictConfig(app.config['LOGGING_CONFIG'])

return app
29 changes: 9 additions & 20 deletions server/utils.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,22 @@
#coding: utf-8

from functools import wraps
from logging.handlers import SMTPHandler as _SMTPHandler

from flask import make_response, request
from flask import jsonify as _jsonify

from server.db import db


class SMTPHandler(_SMTPHandler):
'''SMTP logging handler adapter'''

def __init__(self, *args, **kwargs):
super(SMTPHandler, self).__init__(*args, **kwargs)
self._timeout = 15 # give me more time!


def json_view(func):
@wraps(func)
def allow_CORS(*args, **kwargs):
Expand Down Expand Up @@ -47,23 +56,3 @@ def jsonify(**kwargs):

def error(msg, status_code=500, *args, **kwargs):
return jsonify(error=msg, *args, **kwargs), status_code


# TODO
# - add topic
# - async sending
def send_mail(app, msg):
if not app.config.get('EMAIL_ENABLE', False) or app.debug:
return

import smtplib

username = app.config.get('EMAIL_LOGIN')
password = app.config.get('EMAIL_PWD')
dest = app.config.get('EMAIL_DEST')

server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
server.login(username, password)
server.sendmail(username, dest, msg)
server.quit()
10 changes: 5 additions & 5 deletions server/views/r.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
#coding: utf-8

import logging
from functools import wraps

from flask import Blueprint, current_app
from flask import Blueprint
from flask import request, Response
from flask.views import MethodView

Expand All @@ -17,6 +18,7 @@
from server.models import User, Book, BookLocation, BookSlip

app = Blueprint('r', __name__)
logger = logging.getLogger('app')


class AuthRequired(object):
Expand Down Expand Up @@ -117,8 +119,7 @@ def create_user(user_infos, check_exists=True, is_commit=False):
def network_error_handler(e):
'''网络错误处理'''

current_app.logger.error('hitting %s from %s' % (request.url,
request.remote_addr))
logger.error('hitting %s from %s' % (request.url, request.remote_addr))

return error(u'网络错误', 500)

Expand All @@ -128,8 +129,7 @@ def network_error_handler(e):
def notfound_error_handler(e):
'''书籍查找失败处理'''

current_app.logger.warning('hitting %s from %s' % (request.url,
request.remote_addr))
logger.warning('hitting %s from %s' % (request.url, request.remote_addr))

return error(u'书籍没有找到', 404)

Expand Down
10 changes: 5 additions & 5 deletions tasks/book.py
Original file line number Diff line number Diff line change
@@ -1,23 +1,24 @@
#coding: utf-8

import logging
from time import sleep

from flask import current_app

import api
from api import LibraryNotFoundError

from server.app import build
from server.db import db
from server.models import Book, BookLocation
from server.utils import send_mail

from .queue import book_queue


__all__ = ['update_book', 'update_books']


logger = logging.getLogger('tasks')


def update_book(ctrlno):
'''更新书籍信息
Expand Down Expand Up @@ -48,8 +49,7 @@ def update_books():

app = build()
with app.app_context():
current_app.logger.debug('start updating all books...')
send_mail(app, 'start updating all books')
logger.info('start updating all books...')
for book in Book.query.all():
book_queue.enqueue(update_book, book.ctrlno)
sleep(5)
Expand Down

0 comments on commit 7708ce2

Please sign in to comment.