2014-06-11 129 views
6

我使用谷歌應用引擎和golang構建了一個簡單的網絡應用。在下面的代碼中,我使用fmt.Println兩次打印出來用於調試目的。我沒有任何問題運行應用程序。一切正常,除了終端上沒有任何東西被打印出爲什麼fmt.Println不能在Google應用引擎中工作

func HomeHandler(w http.ResponseWriter, r *http.Request) { 
    c := appengine.NewContext(r) 
    q := datastore.NewQuery("Post").Ancestor(goblogKey(c)).Order("-CreatedOn").Limit(10) 

    //posts := make([]entity.Post, 0, 10) 
    var posts []entity.Post 

    if _, err := q.GetAll(c, &posts); err != nil { 
     http.Error(w, err.Error(), http.StatusInternalServerError) 
     return 
    } 

    fmt.Println(string(len(posts)) + "...........") 

    postList := []dto.Post{} 

    for _, val := range posts { 
     newpost := dto.Post{ 
      Post:  val, 
      BodyHTML: template.HTML(val.Body), 
     } 

     fmt.Println(val.Title) 

     postList = append(postList, newpost) 
    } 

    page := dto.PageData{Title: "Home", Posts: postList} 
    templates.ExecuteTemplate(w, "index", page) 
} 
+3

嘗試'log.Println'。您可能需要'導入(日誌)' – GAEfan

回答

10

在真正的appengine環境中,你不能選擇任何輸出到標準輸出。
Appengine上下文讓你遠離日誌(你可以檢查你的appengine管理頁面和控制檯操場)。

func HomeHandler(w http.ResponseWriter, r *http.Request) { 
    c := appengine.NewContext(r) 
    c.Debugf("The message: %s", "foo") 
    ... 

瞭解更多:https://developers.google.com/appengine/docs/go/reference#Context

+0

如果我想在處理程序設置之前記錄一些內容,該怎麼辦? – julestruong

0

標準I/O或錯誤用於與devleoper使用的應用程序服務器進行通信。在生產系統中,使用標準I/O沒有意義。在生產系統中,日誌用於跟蹤結果。在應用引擎中有一些限制。像fmt,套接字等。

在遠程服務器上測試或運行程序時總是使用日誌。

相關問題