2016-07-25 71 views
0

我有一個web應用程序與應用程序引擎如何當cron作業觸發登錄火力回調裏面

一個servlet和一個cron作業,調用這個servlet

我我怎樣才能看到日誌在Firebase內部回撥? "onDataChange"

我只看到從"doPost()"

private static final Logger logger = Logger.getLogger(MatchingServlet.class.getName()); 

    @Override 
public void doPost(HttpServletRequest req, HttpServletResponse resp) 
     throws ServletException, IOException { 
    logger.info("in matching-servlet doPost"); 

    readFromDb(); 

} 

private void readFromDb() { 
    firebase.child("users").addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      StringBuilder sb = new StringBuilder(); 

      sb.append("elad inside onDataChange. time: "+ System.currentTimeMillis()); 
      firebase.child("logs").setValue(sb.toString()); 

      List<User> users = new ArrayList<User>(); 
      Iterable<DataSnapshot> children = dataSnapshot.getChildren(); 

      System.out.println("children = " + children); 
      logger.info("children = " + children); 
      for (DataSnapshot ds : children) { 

回答

0

火力地堡回調日誌異步,所以你readFromDB應該註冊一個監聽器,只是一直在等待的火力地堡發送更新,不幸的是你的線程就打死任務結束。對於GAE來說,這是一個很大的問題,因爲實例正在被創建和銷燬,因此獲得與Firebase服務器的連接並不是微不足道的。

爲了與火力地堡回調來工作,你將不得不設置一個resident instance使用服務(以前稱爲模塊)

+0

,如果我有一個居民的實例,我怎麼能登錄回調方法裏面?仍然沒有出現在控制檯中的日誌 –

+0

日誌應該與標準實例上的日誌完全一樣。 HEADS UP:默認記錄器級別爲WARN,因此低於該級別的所有內容(例如,您登錄的INFO消息)將不會顯示 – jirungaray

+0

我已將級別更改爲INFO,並且回調中沒有日誌輸出到日誌中。只有當我將日誌保存到firebase「logs」子項時,纔可以稍後寫入和讀取它。怎麼來的? –