Thursday, May 19, 2016

Python Pecan Web Framework Tutorial (3) -- adding oslo-log

pecanconfiglog

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