1. 程式人生 > >配置mongo java driver顯示操作日誌

配置mongo java driver顯示操作日誌

轉自:https://github.com/ewcmsfree/ewcms/wiki/Help-mongo-logging

在使用hiberate實現資料層時,總會開啟hibernate.show_sql=true選項,顯示hibernate生成的SQL語句。他們可以通過生成的SQL語句瞭解ORM使用和執行,並可以依據SQL語句優化程式。同理我們也希望在mongo java driver中看見生成操作資料庫語句日誌。

直接使用mongo driver

在mongo driver載入之前設定如下系統屬性:
// Enable MongoDB logging in general
System.setProperty("DEBUG.MONGO", "true");

// Enable DB operation tracing
System.setProperty("DB.TRACE", "true");

使用spring

spring使用了依賴注入,mongo driver載入由spring完成,所以也使用注入方法設定系統屬性,設定方法如下:
    <bean id="sysProps"
        class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
        <property name="targetClass" value="java.lang.System" />
        <property name="targetMethod" value="getProperties" />
    </bean>
    <bean id="sysMongo"
        class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
        <property name="targetObject" ref="sysProps"/>
        <property name="targetMethod" value="setProperty"/>
        <property name="arguments">
            <list>
                  <value>DEBUG.MONGO</value>
                  <value>true</value>
            </list>
        </property>
    </bean>
    <bean id="sysDbTrace"
        class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
        <property name="targetObject" ref="sysProps"/>
        <property name="targetMethod" value="setProperty"/>
        <property name="arguments">
            <list>
                  <value>DB.TRACE</value>
                  <value>true</value>
            </list>
        </property>
    </bean>
    <mongo:mongo host="localhost" port="27017">
        <mongo:options connections-per-host="8"
            threads-allowed-to-block-for-connection-multiplier="4"
            connect-timeout="1000" max-wait-time="1500" auto-connect-retry="true"
            socket-keep-alive="true" socket-timeout="1500" slave-ok="true"
            write-number="1" write-timeout="0" write-fsync="false" />
    </mongo:mongo>
    <mongo:db-factory dbname="ewcms" mongo-ref="mongo" />

日誌效果

資訊: localhost:27017
三月 30, 2012 3:31:46 下午 com.mongodb.DBApiLayer trace
資訊: find: ewcms.system.indexes { "name" : "name" , "ns" : "ewcms.person" , "dropDups" : false , "sparse" : false , "unique" : false , "key" : { "name" : 1}}
三月 30, 2012 3:31:46 下午 com.mongodb.DBApiLayer trace
資訊: save:  ewcms.system.indexes { "name" : "name" , "ns" : "ewcms.person" , "dropDups" : false , "sparse" : false , "unique" : false , "key" : { "name" : 1}}
三月 30, 2012 3:31:46 下午 com.mongodb.DBApiLayer trace
資訊: find: ewcms.system.indexes { "name" : "cerId" , "ns" : "ewcms.certificate" , "dropDups" : false , "sparse" : false , "unique" : true , "key" : { "cerId" : 1}}
三月 30, 2012 3:31:46 下午 com.mongodb.DBApiLayer trace
資訊: find: ewcms.system.namespaces { }
三月 30, 2012 3:31:46 下午 com.mongodb.DBApiLayer trace
資訊: find: ewcms.certificate { "brithdate" : { "$gt" : { "$date" : "1976-12-22T16:00:00.000Z"} , "$lt" : { "$date" : "1976-12-24T16:00:00.000Z"}}}