Nếu bạn đang lăn giải pháp của riêng bạn, bạn nên viết một plugin Chai đơn giản mà phát ra dòng nhật ký để một logger logging
. Dưới đây là ví dụ thiết lập trình ghi nhật ký cơ bản, xác định plugin ghi nhật ký và tạo ứng dụng Chai có plugin được cài đặt trên tất cả các tuyến.
from bottle import Bottle, request, response
from datetime import datetime
from functools import wraps
import logging
logger = logging.getLogger('myapp')
# set up the logger
logger.setLevel(logging.INFO)
file_handler = logging.FileHandler('myapp.log')
formatter = logging.Formatter('%(msg)s')
file_handler.setLevel(logging.DEBUG)
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
def log_to_logger(fn):
'''
Wrap a Bottle request so that a log line is emitted after it's handled.
(This decorator can be extended to take the desired logger as a param.)
'''
@wraps(fn)
def _log_to_logger(*args, **kwargs):
request_time = datetime.now()
actual_response = fn(*args, **kwargs)
# modify this to log exactly what you need:
logger.info('%s %s %s %s %s' % (request.remote_addr,
request_time,
request.method,
request.url,
response.status))
return actual_response
return _log_to_logger
app = Bottle()
app.install(log_to_logger)
@app.route('/')
def home():
return ['hello, world']
app.run(host='0.0.0.0', port='8080', quiet=True)
Chạy mã mà mang lại những gì bạn muốn:
% python myapp.py &
% curl -v http://localhost:8080/
% tail myapp.log
127.0.0.1 2015-06-27 16:57:09.983249 GET http://localhost:8080/ 200 OK
Nguồn
2015-06-27 20:57:45
Bạn chấp nhận câu trả lời của ayb, nhưng hãy cân nhắc việc thay đổi câu trả lời đó. Không cần chấp nhận tôi (trừ khi bạn nghĩ đó là câu trả lời chính xác nhất), nhưng tôi không muốn thấy khách truy cập trong tương lai câu hỏi này bị lừa bởi mã của ayb, không nên được sử dụng ngoại trừ trong các ứng dụng nhẹ nhất (và thậm chí sau đó , đó là một thực tế có vấn đề). –