Merge pull request #50 from duhenglucky/log

Add timeout support and log setting  for client 
diff --git a/src/PythonWrapper.cpp b/src/PythonWrapper.cpp
index e41bbdf..404c92a 100644
--- a/src/PythonWrapper.cpp
+++ b/src/PythonWrapper.cpp
@@ -162,7 +162,18 @@
 int PySetProducerMaxMessageSize(void *producer, int size) {
     return SetProducerMaxMessageSize((CProducer *)producer, size);
 }
-
+int PySetProducerLogPath(void *producer, const char *logPath) {
+    return SetProducerLogPath((CProducer *) producer, logPath);
+}
+int PySetProducerLogFileNumAndSize(void *producer, int fileNum, long fileSize) {
+    return SetProducerLogFileNumAndSize((CProducer *) producer, fileNum, fileSize);
+}
+int PySetProducerLogLevel(void *producer, CLogLevel level) {
+    return SetProducerLogLevel((CProducer *) producer, level);
+}
+int PySetProducerSendMsgTimeout(void *producer, int timeout) {
+    return SetProducerSendMsgTimeout((CProducer *) producer, timeout);
+}
 
 PySendResult PySendMessageSync(void *producer, void *msg) {
     PySendResult ret;
@@ -337,6 +348,18 @@
     return SetPushConsumerMessageModel((CPushConsumer *) consumer, messageModel);
 }
 
+int PySetPushConsumerLogPath(void *consumer, const char *logPath) {
+    return SetPushConsumerLogPath((CPushConsumer *) consumer, logPath);
+}
+
+int PySetPushConsumerLogFileNumAndSize(void *consumer, int fileNum, long fileSize) {
+    return SetPushConsumerLogFileNumAndSize((CPushConsumer *) consumer, fileNum, fileSize);
+}
+
+int PySetPushConsumerLogLevel(void *consumer, CLogLevel level) {
+    return SetPushConsumerLogLevel((CPushConsumer *) consumer, level);
+}
+
 //push consumer
 int PySetPullConsumerNameServerDomain(void *consumer, const char *domain) {
     return SetPullConsumerNameServerDomain((CPullConsumer *) consumer, domain);
@@ -386,6 +409,15 @@
             .value("BROADCASTING", BROADCASTING)
             .value("CLUSTERING", CLUSTERING);
 
+    enum_<CLogLevel>("CLogLevel")
+            .value("E_LOG_LEVEL_FATAL", E_LOG_LEVEL_FATAL)
+            .value("E_LOG_LEVEL_ERROR", E_LOG_LEVEL_ERROR)
+            .value("E_LOG_LEVEL_WARN", E_LOG_LEVEL_WARN)
+            .value("E_LOG_LEVEL_INFO", E_LOG_LEVEL_INFO)
+            .value("E_LOG_LEVEL_DEBUG", E_LOG_LEVEL_DEBUG)
+            .value("E_LOG_LEVEL_TRACE", E_LOG_LEVEL_TRACE)
+            .value("E_LOG_LEVEL_LEVEL_NUM", E_LOG_LEVEL_LEVEL_NUM);
+
 
     //For Message
     def("CreateMessage", PyCreateMessage, return_value_policy<return_opaque_pointer>());
@@ -422,6 +454,11 @@
     def("SetProducerSessionCredentials", PySetProducerSessionCredentials);
     def("SetProducerCompressLevel", PySetProducerCompressLevel);
     def("SetProducerMaxMessageSize", PySetProducerMaxMessageSize);
+    def("SetProducerSendMsgTimeout", PySetProducerSendMsgTimeout);
+
+    def("SetProducerLogPath", PySetProducerLogPath);
+    def("SetProducerLogFileNumAndSize", PySetProducerLogFileNumAndSize);
+    def("SetProducerLogLevel", PySetProducerLogLevel);
 
     def("SendMessageSync", PySendMessageSync);
     def("SendMessageAsync", PySendMessageAsync);
@@ -445,6 +482,9 @@
     def("Subscribe", PySubscribe);
     def("RegisterMessageCallback", PyRegisterMessageCallback);
     def("RegisterMessageCallbackOrderly", PyRegisterMessageCallbackOrderly);
+    def("SetPushConsumerLogPath", PySetPushConsumerLogPath);
+    def("SetPushConsumerLogFileNumAndSize", PySetPushConsumerLogFileNumAndSize);
+    def("SetPushConsumerLogLevel", PySetPushConsumerLogLevel);
 
     //pull consumer
     def("SetPullConsumerNameServerDomain", PySetPullConsumerNameServerDomain);
diff --git a/src/PythonWrapper.h b/src/PythonWrapper.h
index e421448..29a4952 100644
--- a/src/PythonWrapper.h
+++ b/src/PythonWrapper.h
@@ -115,6 +115,10 @@
 int PySetProducerSessionCredentials(void *producer, const char *accessKey, const char *secretKey, const char *channel);
 int PySetProducerCompressLevel(void *producer, int level);
 int PySetProducerMaxMessageSize(void *producer, int size);
+int PySetProducerLogPath(void *producer, const char *logPath);
+int PySetProducerLogFileNumAndSize(void *producer, int fileNum, long fileSize);
+int PySetProducerLogLevel(void *producer, CLogLevel level);
+int PySetProducerSendMsgTimeout(void *producer, int timeout);
 
 PySendResult PySendMessageSync(void *producer, void *msg);
 int PySendMessageOneway(void *producer, void *msg);
@@ -146,9 +150,11 @@
 int PySetPushConsumerThreadCount(void *consumer, int threadCount);
 int PySetPushConsumerMessageBatchMaxSize(void *consumer, int batchSize);
 int PySetPushConsumerInstanceName(void *consumer, const char *instanceName);
-int PySetPushConsumerSessionCredentials(void *consumer, const char *accessKey, const char *secretKey,
-                                        const char *channel);
+int PySetPushConsumerSessionCredentials(void *consumer, const char *accessKey, const char *secretKey, const char *channel);
 int PySetPushConsumerMessageModel(void *consumer, CMessageModel messageModel);
+int PySetPushConsumerLogPath(void *consumer, const char *logPath);
+int PySetPushConsumerLogFileNumAndSize(void *consumer, int fileNum, long fileSize);
+int PySetPushConsumerLogLevel(void *consumer, CLogLevel level);
 
 //push consumer
 int PySetPullConsumerNameServerDomain(void *consumer, const char *domain);
diff --git a/test/TestConsumeMessages.py b/test/TestConsumeMessages.py
index 9f6aab7..c3c252a 100644
--- a/test/TestConsumeMessages.py
+++ b/test/TestConsumeMessages.py
@@ -56,6 +56,7 @@
     consumer = CreatePushConsumer(_group)
     SetPushConsumerNameServerAddress(consumer, name_srv)
     SetPushConsumerThreadCount(consumer, 1)
+    SetPushConsumerLogLevel(consumer, CLogLevel.E_LOG_LEVEL_INFO)
     SetPushConsumerMessageModel(consumer, CMessageModel.CLUSTERING)
     Subscribe(consumer, _topic, _tag)
     RegisterMessageCallback(consumer, consumer_message, None)
diff --git a/test/TestSendMessages.py b/test/TestSendMessages.py
index 97cfd3c..9baf78e 100644
--- a/test/TestSendMessages.py
+++ b/test/TestSendMessages.py
@@ -26,6 +26,7 @@
 
 def init_producer():
     producer = CreateProducer('TestProducer')
+    SetProducerLogLevel(producer, CLogLevel.E_LOG_LEVEL_INFO)
     SetProducerNameServerAddress(producer, name_srv)
     StartProducer(producer)
     return producer