2014-06-06 43 views
0

我正在使用mongo-java-driver-2.9.1與mongodb進行交互,我想記錄在mongodb服務器上觸發的查詢。例如在java中插入的文件,這是我寫的在java中記錄mongodb查詢

DBCollection coll = db.getCollection("mycollection"); 
    BasicDBObject doc = new BasicDBObject("name", "MongoDB") 
      .append("type", "database") 
      .append("count", 1); 
    coll.insert(doc); 

這個代碼,在「蒙戈」客戶端等效代碼爲MongoDB中插入文檔

db.mycollection.insert({ 
    "name" : "MongoDB", 
    "type" : "database", 
    "count" : 1 
}) 

我想記錄這第二個代碼,有沒有辦法做到這一點?

+1

增加mongodb服務器日誌的詳細程度。它有幾個級別的詳細程度。在某些時候,你會開始在日誌中看到插入甚至查詢。 –

+0

如何使用java驅動程序設置詳細程度,我搜索了它,但找不到,我想在我自己的日誌中記錄查詢,不想使用服務器日誌,我需要查詢以便我甚至可以打印並顯示給用戶。 –

+0

您可以通過更改服務器的啓動參數來設置日誌詳細程度。至於你的自定義日誌記錄,我認爲你必須在發送到數據庫服務器之前的某個地方攔截傳出的查詢。我不使用java驅動程序,所以不能說更具體的東西。 –

回答

0

我認爲MongoDB Java驅動程序沒有日誌支持,所以你必須自己寫日誌消息。這裏的一個例子:

DBCollection coll = db.getCollection("mycollection"); 
BasicDBObject doc = new BasicDBObject("name", "MongoDB") 
     .append("type", "database") 
     .append("count", 1); 
WriteResult insert = coll.insert(doc); 
String msg = ""; 
if(insert.getError() == null){ 
    msg = "insert into: " + collection.toString() +" ; Object " + q.toString()); 
    //log the message 
} else { 
    msg = "ERROR by insert into: " + collection.toString() +" ; Object " + q.toString()); 
    msg = msg + " Error message: " + insert.getError(); 
} 
//log the message