2010-02-09 84 views
18

我知道你可以用appcfg.py下載原始訪問日誌,但是我真的很感興趣的是有關Python特定請求的所有信息,例如python日誌語句,異常和api統計信息(只是就像在線日誌查看器一樣)。有誰知道是否有辦法以另一種方式獲取這些信息,然後自己構建它?從AppEngine下載日誌包括Python日誌語句

如果有人想知道,我們想對問題做一些連續的統計分析,並在辦公室的牆上的大屏幕上顯示它們。

回答

21

當然 - 只要傳遞--severity標誌appcfg.py:

$ appcfg.py help request_logs 
Usage: appcfg.py [options] request_logs <directory> <output_file> 

Write request logs in Apache common log format. 

The 'request_logs' command exports the request logs from your application 
to a file. It will write Apache common log format records ordered 
chronologically. If output file is '-' stdout will be written. 

Options: 
    -h, --help   Show the help message and exit. 
    -q, --quiet   Print errors only. 
    -v, --verbose   Print info level logs. 
    --noisy    Print all logs. 
    -s SERVER, --server=SERVER 
         The server to connect to. 
    --insecure   Use HTTP when communicating with the server. 
    -e EMAIL, --email=EMAIL 
         The username to use. Will prompt if omitted. 
    -H HOST, --host=HOST Overrides the Host header sent with all RPCs. 
    --no_cookies   Do not save authentication cookies to local disk. 
    --passin    Read the login password from stdin. 
    -A APP_ID, --application=APP_ID 
         Override application from app.yaml file. 
    -V VERSION, --version=VERSION 
         Override (major) version from app.yaml file. 
    -n NUM_DAYS, --num_days=NUM_DAYS 
         Number of days worth of log data to get. The cut-off 
         point is midnight UTC. Use 0 to get all available 
         logs. Default is 1, unless --append is also given; 
         then the default is 0. 
    -a, --append   Append to existing file. 
    --severity=SEVERITY Severity of app-level log messages to get. The range 
         is 0 (DEBUG) through 4 (CRITICAL). If omitted, only 
         request logs are returned. 
    --vhost=VHOST   The virtual host of log messages to get. If omitted, 
         all log messages are returned. 
    --include_vhost  Include virtual host in log messages. 
    --end_date=END_DATE End date (as YYYY-MM-DD) of period for log data. 
         Defaults to today. 
+0

我怎麼能錯過了:-( – 2010-02-09 22:36:40

15

這是我們什麼作品真的很好:

appcfg.py --append --num_days=0 --include_all request_logs /path/to/your/app/ /var/log/gae/yourapp.log 

不管怎麼說,線以上將得到所有你記錄日誌並將它們追加到日誌文件中,如果以前執行過它,則會創建一個新的日誌文件。它實際上會查看你現有的日誌(如果它存在的話)並且它不會得到任何重複。如果需要,您可以在不使用--append的情況下運行此操作,但如果您自動執行日誌下載,則可以使用它。

這裏的關鍵是--include_all標誌,這似乎是無證的。如果您使用GAE的Web日誌查看器,此標誌將獲得您看到的所有數據。所以,你會得到如下字段:ms = 71 cpu_ms = 32 api_cpu_ms = 12 cpm_usd = 0.000921 ...等等

好的,我希望能幫助別人。

順便說一句,我們寫了這個博客文章,看看這裏:http://bit.ly/GAE-LOGS

+0

不能完全謝謝你!我的應用程序很快接近90天保留限制,我現在不知道現在保存所有日誌,不僅僅是它們的一部分,現在我知道!=) – lenik 2012-06-24 02:45:22

+0

' --include-all'標誌似乎沒有得到OP提到的Python'logging'輸出。也許它用於,但不再是。然而,@尼克約翰遜的提示使用'--severity'標誌似乎有訣竅! – hamx0r 2016-05-18 02:09:03

0

下面是一個方法來訪問原始日誌,以便您可以進一步處理,而無需自定義分析(對我來說也request_logs沒有下載的所有數據對於指定的時間範圍)。

這裏是一個運行在自身的AppEngine應用程序: https://gaelogapp.appspot.com/

您可以輕鬆地更新添加此功能,您的應用程序的app.yaml和複製logs.py: https://github.com/okigan/gaelogapp