Python Pecan Web Framework Tutorial (3) -- adding oslo-log
我們繼續討論Pecan Web Framework未完成的部分-Oslo.log。在之前我們已經討論過oslo.confg如何跟pecan 結合
http://gogosatellite.blogspot.tw/2016/05/python-pecan-web-framework-tutorial-2.html
除此之外,我們也介紹了一個範例,如何使用Oslo-log。
http://gogosatellite.blogspot.tw/2016/05/oslo-log-tutorial.html
我們整合pecan,oslo-config,與oslo-log,程式部分放在我的Github中
https://github.com/jonahwu/lab/tree/master/pecan/pecantest/testprojectconfiglog
首先,我們先列出目錄結構
root@ubuntu:~/lab/pecan/pecan_test/test_project_config_log# tree
.
├── api.conf
├── api.log
├── api_paste.ini
├── api_paste.ini_bak
├── api.py
├── app_eventlet.py
├── app.py
├── app.pyc
├── app.wsgi
├── common
│ ├── _i18n.py
│ ├── i18n.py
│ ├── _i18n.pyc
│ ├── i18n.pyc
│ ├── __init__.py
│ ├── __init__.pyc
│ ├── local.py
│ ├── local.pyc
│ ├── oslolog.py
│ └── oslolog.pyc
├── config.py
├── config.pyc
├── dist
│ └── test_project-0.1-py2.7.egg
├── healthcheck.py
├── healthcheck.pyc
├── hooks.py
├── hooks.pyc
├── __init__.py
├── __init__.pyc
├── MANIFEST.in
├── readme
├── service.py
├── service.pyc
├── setup.cfg
├── setup.py
├── test_project
│ ├── app.py
│ ├── app.pyc
│ ├── controllers
│ │ ├── __init__.py
│ │ ├── __init__.pyc
│ │ ├── root.py
│ │ ├── root.py_bak
│ │ ├── root.pyc
│ │ └── v2
│ │ ├── __init__.py
│ │ ├── __init__.pyc
│ │ ├── meters.py
│ │ ├── meters.pyc
│ │ ├── query2.py
│ │ ├── query2.pyc
│ │ ├── query.py
│ │ ├── query.pyc
│ │ ├── root.py
│ │ └── root.pyc
│ ├── __init__.py
│ ├── __init__.pyc
重點我們先放在common目錄裡,這裏提供了所有需要的oslo-log的代碼,讀者只要將這目錄放到自己的檔案目錄中就可以使用了。 這部分,在我之前的Blog就有提到了
http://gogosatellite.blogspot.tw/2016/05/oslo-log-tutorial.html
加入oslo-log的相關程式於service.py
from oslo_config import cfg
import sys
import common.oslolog as logging
def prepare_service(argv=None):
if argv is None:
argv = sys.argv
cfg.CONF(argv[1:], project='app', validate_default_values=True)
CONF=cfg.CONF
DOMAIN = "app"
logging.setup(CONF, DOMAIN)
大家可以比一下,與之前我的Blog中討論config的部分就知道其實改變並不大。
接下來就是,真實程式運作的部分,包含app.py與controller中程式的改變,以controller/v2/query.py為例 其中app.py只需要修改,以下三行即可
from common import oslolog as logging
from common.i18n import _
.
.
LOG = logging.getLogger(__name__)
而controller中只需要加入兩行即可,以controller/v2/query.py為例
import common.oslolog as logging
LOG = logging.getLogger(__name__)
在GET中我們修改為
@pecan.expose()
def get(self):
print 'show threaded we used %s'%CONF.api.threaded
print 'return query'
LOG.error('return query from logger')
已經大功告成了,我們來執行看看
./api.py --debug --config-file /root/pecan_test/test_project/api.conf --log-file /root/pecan_test/test_project/api.log
請注意這裏的目錄跟我們在github上所定義的目錄是不同的,讀者可隨之修正。
request為
curl http://localhost:8080/v2/query
我們得到結果
Croot@ubuntu:~/pecan_test/test_project# cat api.log
2016-05-17 07:42:52.601 18175 ERROR app [-] -------------------api paste file /root/pecan_test/test_project/api_paste.ini
2016-05-17 07:42:52.616 18175 INFO werkzeug [-] * Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)
2016-05-17 07:42:54.203 18175 ERROR test_project.controllers.v2.query [-] return query from logger
2016-05-17 07:42:54.205 18175 INFO wsgi [-] 127.0.0.1 - - [17/May/2016:07:42:54 +0800] "GET /v2/query HTTP/1.1" 200 9 "-" "curl/7.35.0"
2016-05-17 07:42:54.205 18175 INFO werkzeug [-] 127.0.0.1 - - [17/May/2016 07:42:54] "GET /v2/query HTTP/1.1" 200 -
我們得到結果return query from logger, oslo-log已經成功放入了。
一個application,config與log是不可或缺的,我們跟pecan整合起來,提供給讀者一個更容易使用的方法,加速開發的時間。
No comments:
Post a Comment