You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by hx...@apache.org on 2019/05/25 06:06:51 UTC

[incubator-iotdb] branch master updated: [IOTDB-95]keep stack trace when logging or throwing an Exception (#180)

This is an automated email from the ASF dual-hosted git repository.

hxd pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 2fbd949  [IOTDB-95]keep stack trace when logging or throwing an Exception (#180)
2fbd949 is described below

commit 2fbd949b087a5e0fd8552b0384d88a877bc22f2b
Author: Jiang Tian <jt...@163.com>
AuthorDate: Sat May 25 14:06:47 2019 +0800

    [IOTDB-95]keep stack trace when logging or throwing an Exception (#180)
    
    * keep stack trace when logging or throwing an Exception
---
 .../org/apache/iotdb/tsfile/hadoop/TSFRecordWriter.java  | 11 +++--------
 .../apache/iotdb/tsfile/hadoop/example/TsFileHelper.java |  6 ++----
 .../java/cn/edu/thu/tsfile/hadoop/TsFileTestHelper.java  |  6 ++----
 .../apache/iotdb/db/auth/authorizer/BasicAuthorizer.java |  3 +--
 .../db/exception/BufferWriteProcessorException.java      |  2 +-
 .../iotdb/db/exception/FileNodeProcessorException.java   |  2 +-
 .../iotdb/db/exception/OverflowProcessorException.java   |  2 +-
 .../iotdb/db/exception/qp/IllegalASTFormatException.java |  7 +++++++
 .../iotdb/db/exception/qp/LogicalOperatorException.java  |  7 +++++++
 .../iotdb/db/exception/qp/LogicalOptimizeException.java  |  7 +++++++
 .../iotdb/db/exception/qp/QueryProcessorException.java   |  4 ++++
 .../main/java/org/apache/iotdb/db/qp/QueryProcessor.java |  2 +-
 .../iotdb/db/qp/executor/QueryProcessExecutor.java       |  2 +-
 .../iotdb/db/qp/logical/crud/BasicFunctionOperator.java  |  2 +-
 .../apache/iotdb/db/qp/strategy/PhysicalGenerator.java   |  2 +-
 .../db/qp/strategy/optimizer/ConcatPathOptimizer.java    |  9 +++------
 .../org/apache/iotdb/db/service/CloseMergeService.java   |  6 ++----
 .../src/main/java/org/apache/iotdb/db/service/IoTDB.java |  9 +++------
 .../java/org/apache/iotdb/db/service/JDBCService.java    |  9 ++++-----
 .../java/org/apache/iotdb/db/service/JMXService.java     |  5 ++---
 .../main/java/org/apache/iotdb/db/service/Monitor.java   |  3 +--
 .../org/apache/iotdb/db/service/RegisterManager.java     |  2 +-
 .../java/org/apache/iotdb/db/service/TSServiceImpl.java  | 13 +++++++------
 .../java/org/apache/iotdb/db/sql/parse/ParseDriver.java  |  2 +-
 .../main/java/org/apache/iotdb/db/utils/RecordUtils.java |  2 +-
 .../db/writelog/manager/MultiFileLogNodeManager.java     |  9 ++-------
 .../iotdb/db/writelog/node/ExclusiveWriteLogNode.java    |  2 +-
 .../writelog/recover/ExclusiveLogRecoverPerformer.java   | 11 ++++-------
 .../iotdb/db/writelog/replay/ConcreteLogReplayer.java    |  2 +-
 .../main/java/org/apache/iotdb/jdbc/IoTDBConnection.java |  6 +++---
 .../main/java/org/apache/iotdb/jdbc/IoTDBStatement.java  |  6 +++---
 .../iotdb/tsfile/exception/write/PageException.java      |  8 ++++++++
 .../tsfile/exception/write/WriteProcessException.java    | 16 +++++++++-------
 .../org/apache/iotdb/tsfile/write/chunk/ChunkBuffer.java |  7 +++----
 .../apache/iotdb/tsfile/write/chunk/ChunkWriterImpl.java |  7 ++-----
 35 files changed, 101 insertions(+), 98 deletions(-)

diff --git a/hadoop/src/main/java/org/apache/iotdb/tsfile/hadoop/TSFRecordWriter.java b/hadoop/src/main/java/org/apache/iotdb/tsfile/hadoop/TSFRecordWriter.java
index 346d8c9..ad88824 100644
--- a/hadoop/src/main/java/org/apache/iotdb/tsfile/hadoop/TSFRecordWriter.java
+++ b/hadoop/src/main/java/org/apache/iotdb/tsfile/hadoop/TSFRecordWriter.java
@@ -46,17 +46,14 @@ public class TSFRecordWriter extends RecordWriter<NullWritable, TSRow> {
     try {
       fileSchema = new FileSchema(schema);
     } catch (InvalidJsonSchemaException e) {
-      e.printStackTrace();
-      LOGGER.error("Construct the tsfile schema failed, the reason is {}", e.getMessage());
-      throw new InterruptedException(e.getMessage());
+      throw new InterruptedException(String.format("Construct the tsfile schema failed"), e);
     }
 
     HDFSOutputStream hdfsOutputStream = new HDFSOutputStream(path, new Configuration(), false);
     try {
       write = new TsFile(hdfsOutputStream, fileSchema);
     } catch (WriteProcessException e) {
-      e.printStackTrace();
-      throw new IOException(e.getMessage());
+      throw new IOException(e);
     }
   }
 
@@ -66,9 +63,7 @@ public class TSFRecordWriter extends RecordWriter<NullWritable, TSRow> {
     try {
       write.writeRecord(value.getRow());
     } catch (WriteProcessException e) {
-      e.printStackTrace();
-      LOGGER.error("Write tsfile record error, the error message is {}", e.getMessage());
-      throw new InterruptedException(e.getMessage());
+      throw new InterruptedException(String.format("Write tsfile record error"), e);
     }
   }
 
diff --git a/hadoop/src/main/java/org/apache/iotdb/tsfile/hadoop/example/TsFileHelper.java b/hadoop/src/main/java/org/apache/iotdb/tsfile/hadoop/example/TsFileHelper.java
index d648029..23dcd48 100644
--- a/hadoop/src/main/java/org/apache/iotdb/tsfile/hadoop/example/TsFileHelper.java
+++ b/hadoop/src/main/java/org/apache/iotdb/tsfile/hadoop/example/TsFileHelper.java
@@ -75,11 +75,9 @@ public class TsFileHelper {
       tsFile.writeLine("root.car.d2,8, s1, 8, s2, 80, s3, 200.8, s4, 0.8");
       tsFile.close();
     } catch (IOException e) {
-      e.printStackTrace();
-      throw new RuntimeException(e.getMessage());
+      throw new RuntimeException(e);
     } catch (WriteProcessException e) {
-      e.printStackTrace();
-      throw new RuntimeException(e.getMessage());
+      throw new RuntimeException(e);
     }
   }
 
diff --git a/hadoop/src/test/java/cn/edu/thu/tsfile/hadoop/TsFileTestHelper.java b/hadoop/src/test/java/cn/edu/thu/tsfile/hadoop/TsFileTestHelper.java
index a80f3cd..a1e832d 100644
--- a/hadoop/src/test/java/cn/edu/thu/tsfile/hadoop/TsFileTestHelper.java
+++ b/hadoop/src/test/java/cn/edu/thu/tsfile/hadoop/TsFileTestHelper.java
@@ -75,11 +75,9 @@ public class TsFileTestHelper {
       tsFile.writeLine("root.car.d2,8, s1, 8, s2, 80, s3, 200.8, s4, 0.8");
       tsFile.close();
     } catch (IOException e) {
-      e.printStackTrace();
-      throw new RuntimeException(e.getMessage());
+      throw new RuntimeException(e);
     } catch (WriteProcessException e) {
-      e.printStackTrace();
-      throw new RuntimeException(e.getMessage());
+      throw new RuntimeException(e);
     }
   }
 
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/auth/authorizer/BasicAuthorizer.java b/iotdb/src/main/java/org/apache/iotdb/db/auth/authorizer/BasicAuthorizer.java
index 07f1033..439b3d2 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/auth/authorizer/BasicAuthorizer.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/auth/authorizer/BasicAuthorizer.java
@@ -243,8 +243,7 @@ public abstract class BasicAuthorizer implements IAuthorizer, IService {
     try {
       init();
     } catch (AuthException e) {
-      LOGGER.error("Auth authentication error : ", e);
-      throw new StartupException(e.getMessage());
+      throw new StartupException(e);
     }
   }
 
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/exception/BufferWriteProcessorException.java b/iotdb/src/main/java/org/apache/iotdb/db/exception/BufferWriteProcessorException.java
index bf6a349..19b2908 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/exception/BufferWriteProcessorException.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/exception/BufferWriteProcessorException.java
@@ -35,7 +35,7 @@ public class BufferWriteProcessorException extends ProcessorException {
   }
 
   public BufferWriteProcessorException(Throwable throwable) {
-    super(throwable.getMessage());
+    super(throwable);
   }
 
 }
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/exception/FileNodeProcessorException.java b/iotdb/src/main/java/org/apache/iotdb/db/exception/FileNodeProcessorException.java
index d3cf362..459430a 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/exception/FileNodeProcessorException.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/exception/FileNodeProcessorException.java
@@ -35,7 +35,7 @@ public class FileNodeProcessorException extends ProcessorException {
   }
 
   public FileNodeProcessorException(Throwable throwable) {
-    super(throwable.getMessage());
+    super(throwable);
   }
 
   public FileNodeProcessorException(String msg, Throwable e) {
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/exception/OverflowProcessorException.java b/iotdb/src/main/java/org/apache/iotdb/db/exception/OverflowProcessorException.java
index 21ac261..77361c0 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/exception/OverflowProcessorException.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/exception/OverflowProcessorException.java
@@ -35,7 +35,7 @@ public class OverflowProcessorException extends ProcessorException {
   }
 
   public OverflowProcessorException(Throwable throwable) {
-    super(throwable.getMessage());
+    super(throwable);
   }
 
 }
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/exception/qp/IllegalASTFormatException.java b/iotdb/src/main/java/org/apache/iotdb/db/exception/qp/IllegalASTFormatException.java
index bb7c359..52624a8 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/exception/qp/IllegalASTFormatException.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/exception/qp/IllegalASTFormatException.java
@@ -29,4 +29,11 @@ public class IllegalASTFormatException extends QueryProcessorException {
     super(msg);
   }
 
+  public IllegalASTFormatException(Throwable e) {
+    super(e);
+  }
+
+  public IllegalASTFormatException(String message, Throwable cause) {
+    super(message, cause);
+  }
 }
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/exception/qp/LogicalOperatorException.java b/iotdb/src/main/java/org/apache/iotdb/db/exception/qp/LogicalOperatorException.java
index 91d9424..f3e3dba 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/exception/qp/LogicalOperatorException.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/exception/qp/LogicalOperatorException.java
@@ -29,4 +29,11 @@ public class LogicalOperatorException extends QueryProcessorException {
     super(msg);
   }
 
+  public LogicalOperatorException(Throwable e) {
+    super(e);
+  }
+
+  public LogicalOperatorException(String message, Throwable cause) {
+    super(message, cause);
+  }
 }
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/exception/qp/LogicalOptimizeException.java b/iotdb/src/main/java/org/apache/iotdb/db/exception/qp/LogicalOptimizeException.java
index df32ce2..239a7fe 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/exception/qp/LogicalOptimizeException.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/exception/qp/LogicalOptimizeException.java
@@ -29,4 +29,11 @@ public class LogicalOptimizeException extends LogicalOperatorException {
     super(msg);
   }
 
+  public LogicalOptimizeException(Throwable e) {
+    super(e);
+  }
+
+  public LogicalOptimizeException(String message, Throwable cause) {
+    super(message, cause);
+  }
 }
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/exception/qp/QueryProcessorException.java b/iotdb/src/main/java/org/apache/iotdb/db/exception/qp/QueryProcessorException.java
index 358227b..516c42b 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/exception/qp/QueryProcessorException.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/exception/qp/QueryProcessorException.java
@@ -33,4 +33,8 @@ public class QueryProcessorException extends Exception {
   public QueryProcessorException(Throwable e) {
     super(e);
   }
+
+  public QueryProcessorException(String message, Throwable cause) {
+    super(message, cause);
+  }
 }
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/qp/QueryProcessor.java b/iotdb/src/main/java/org/apache/iotdb/db/qp/QueryProcessor.java
index f63514d..74a1abf 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/qp/QueryProcessor.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/qp/QueryProcessor.java
@@ -108,7 +108,7 @@ public class QueryProcessor {
     } catch (ParseException e) {
       // e.printStackTrace();
       throw new IllegalASTFormatException(
-          "parsing error,statement: " + sqlStr + " .message:" + e.getMessage());
+          "parsing error,statement: " + sqlStr, e);
     }
     return ParseUtils.findRootNonNullToken(astTree);
   }
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/qp/executor/QueryProcessExecutor.java b/iotdb/src/main/java/org/apache/iotdb/db/qp/executor/QueryProcessExecutor.java
index 99476f2..17768aa 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/qp/executor/QueryProcessExecutor.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/qp/executor/QueryProcessExecutor.java
@@ -110,7 +110,7 @@ public abstract class QueryProcessExecutor implements IQueryProcessExecutor {
       }
       return result;
     } catch (PathErrorException e) {
-      throw new ProcessorException(e.getMessage());
+      throw new ProcessorException(e);
     }
   }
 
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/qp/logical/crud/BasicFunctionOperator.java b/iotdb/src/main/java/org/apache/iotdb/db/qp/logical/crud/BasicFunctionOperator.java
index 1610554..5b8815f 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/qp/logical/crud/BasicFunctionOperator.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/qp/logical/crud/BasicFunctionOperator.java
@@ -152,7 +152,7 @@ public class BasicFunctionOperator extends FunctionOperator {
     try {
       ret = new BasicFunctionOperator(this.tokenIntType, path.clone(), value);
     } catch (LogicalOperatorException e) {
-      logger.error("error clone:{}", e.getMessage());
+      logger.error("error clone:", e);
       return null;
     }
     ret.tokenSymbol = tokenSymbol;
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java b/iotdb/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
index ff13a2c..ffa0cdf 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
@@ -74,7 +74,7 @@ public class PhysicalGenerator {
               author.getPassWord(), author.getNewPassword(), author.getPrivilegeList(),
               author.getNodeName());
         } catch (AuthException e) {
-          throw new QueryProcessorException(e.getMessage());
+          throw new QueryProcessorException(e);
         }
       case LOADDATA:
         LoadDataOperator loadData = (LoadDataOperator) operator;
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/qp/strategy/optimizer/ConcatPathOptimizer.java b/iotdb/src/main/java/org/apache/iotdb/db/qp/strategy/optimizer/ConcatPathOptimizer.java
index 9736f7c..bdac149 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/qp/strategy/optimizer/ConcatPathOptimizer.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/qp/strategy/optimizer/ConcatPathOptimizer.java
@@ -306,8 +306,7 @@ public class ConcatPathOptimizer implements ILogicalOptimizer {
             new BasicFunctionOperator(operator.getTokenIntType(), noStarPaths.get(i),
                 ((BasicFunctionOperator) operator).getValue()));
       } catch (LogicalOperatorException e) {
-        LOG.error("meet error while adding child operator to current node.", e);
-        throw new LogicalOptimizeException(e.getMessage());
+        throw new LogicalOptimizeException(e);
       }
     }
     return filterTwoFolkTree;
@@ -336,8 +335,7 @@ public class ConcatPathOptimizer implements ILogicalOptimizer {
         retPaths.add(new Path(pathStr));
       }
     } catch (PathErrorException e) {
-      LOG.error("meet error while removing star.", e);
-      throw new LogicalOptimizeException("error when remove star: " + e.getMessage());
+      throw new LogicalOptimizeException("error when remove star: ", e);
     }
     return retPaths;
   }
@@ -356,8 +354,7 @@ public class ConcatPathOptimizer implements ILogicalOptimizer {
           }
         }
       } catch (PathErrorException e) {
-        LOG.error("meet error while removing star.", e);
-        throw new LogicalOptimizeException("error when remove star: " + e.getMessage());
+        throw new LogicalOptimizeException("error when remove star: ", e);
       }
     }
     if (retPaths.isEmpty()) {
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/service/CloseMergeService.java b/iotdb/src/main/java/org/apache/iotdb/db/service/CloseMergeService.java
index 0915cd3..4131396 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/service/CloseMergeService.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/service/CloseMergeService.java
@@ -119,10 +119,8 @@ public class CloseMergeService implements IService {
       startService();
     } catch (Exception e) {
       String errorMessage = String
-          .format("Failed to start %s because of %s", this.getID().getName(),
-              e.getMessage());
-      LOGGER.error(errorMessage);
-      throw new StartupException(errorMessage);
+          .format("Failed to start %s", this.getID().getName());
+      throw new StartupException(errorMessage, e);
     }
   }
 
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/service/IoTDB.java b/iotdb/src/main/java/org/apache/iotdb/db/service/IoTDB.java
index d9a1938..a7cf296 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/service/IoTDB.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/service/IoTDB.java
@@ -61,8 +61,8 @@ public class IoTDB implements IoTDBMBean {
       checks.verify();
     } catch (StartupException e) {
       // TODO: what are some checks
-      LOGGER.error("{}: failed to start because some checks failed. {}",
-          IoTDBConstant.GLOBAL_DB_NAME, e.getMessage());
+      LOGGER.error("{}: failed to start because some checks failed. ",
+          IoTDBConstant.GLOBAL_DB_NAME, e);
       return;
     }
     try {
@@ -86,10 +86,7 @@ public class IoTDB implements IoTDBMBean {
     try {
       systemDataRecovery();
     } catch (RecoverException e) {
-      String errorMessage = String.format("Failed to recover system data because of %s",
-          e.getMessage());
-      LOGGER.error(errorMessage);
-      throw new StartupException(errorMessage);
+      throw new StartupException("Fail to recover data", e);
     }
     // When registering statMonitor, we should start recovering some statistics
     // with latest values stored
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/service/JDBCService.java b/iotdb/src/main/java/org/apache/iotdb/db/service/JDBCService.java
index 1326e23..a18e263 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/service/JDBCService.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/service/JDBCService.java
@@ -129,12 +129,11 @@ public class JDBCService implements JDBCServiceMBean, IService {
       jdbcServiceThread.setName(ThreadName.JDBC_SERVICE.getName());
       jdbcServiceThread.start();
       startLatch.await();
-    } catch (IOException | InterruptedException | ClassNotFoundException | IllegalAccessException | InstantiationException e) {
+    } catch (IOException | InterruptedException | ClassNotFoundException |
+        IllegalAccessException | InstantiationException e) {
       String errorMessage = String
-          .format("Failed to start %s because of %s", this.getID().getName(),
-              e.getMessage());
-      LOGGER.error(errorMessage);
-      throw new StartupException(errorMessage);
+          .format("Failed to start %s", this.getID().getName());
+      throw new StartupException(errorMessage, e);
     }
 
     LOGGER.info("{}: start {} successfully, listening on ip {} port {}", IoTDBConstant.GLOBAL_DB_NAME,
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/service/JMXService.java b/iotdb/src/main/java/org/apache/iotdb/db/service/JMXService.java
index 74e5691..9ddc9da 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/service/JMXService.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/service/JMXService.java
@@ -138,8 +138,7 @@ public class JMXService implements IService {
       String errorMessage = String
           .format("Failed to start %s because of %s", this.getID().getName(),
               e.getMessage());
-      LOGGER.error(errorMessage);
-      throw new StartupException(errorMessage);
+      throw new StartupException(errorMessage, e);
     }
   }
 
@@ -151,7 +150,7 @@ public class JMXService implements IService {
         LOGGER.info("{}: close {} successfully", IoTDBConstant.GLOBAL_DB_NAME,
             this.getID().getName());
       } catch (IOException e) {
-        LOGGER.error("Failed to stop {} because of {}", this.getID().getName(), e.getMessage());
+        LOGGER.error("Failed to stop {} because of: ", this.getID().getName(), e);
       }
     }
   }
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/service/Monitor.java b/iotdb/src/main/java/org/apache/iotdb/db/service/Monitor.java
index 6348f50..53fb90f 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/service/Monitor.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/service/Monitor.java
@@ -148,8 +148,7 @@ public class Monitor implements MonitorMBean, IService {
       String errorMessage = String
           .format("Failed to start %s because of %s", this.getID().getName(),
               e.getMessage());
-      LOGGER.error(errorMessage);
-      throw new StartupException(errorMessage);
+      throw new StartupException(errorMessage, e);
     }
   }
 
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/service/RegisterManager.java b/iotdb/src/main/java/org/apache/iotdb/db/service/RegisterManager.java
index 5a9f327..cec2233 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/service/RegisterManager.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/service/RegisterManager.java
@@ -55,7 +55,7 @@ public class RegisterManager {
       try {
         service.stop();
       } catch (Exception e) {
-        LOGGER.error("Failed to stop {} because {}", service.getID().getName(), e.getMessage());
+        LOGGER.error("Failed to stop {} because:", service.getID().getName(), e);
       }
     }
     iServices.clear();
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java b/iotdb/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java
index b02f1c2..592b009 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java
@@ -193,7 +193,7 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
 
       clearAllStatusForCurrentRequest();
     } catch (Exception e) {
-      LOGGER.error("Error in closeOperation : {}", e.getMessage());
+      LOGGER.error("Error in closeOperation : ", e);
     }
     return new TSCloseOperationResp(new TS_Status(TS_StatusCode.SUCCESS_STATUS));
   }
@@ -465,6 +465,7 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
               "Fail to generate physcial plan and execute for statement "
                   + "%s beacuse %s",
               statement, e.getMessage());
+          LOGGER.warn("Error occurred when executing {}", statement, e);
           result.add(Statement.EXECUTE_FAILED);
           isAllSuccessful = false;
           batchErrorMessage = errMessage;
@@ -506,6 +507,7 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
               "Execute set consistency level successfully");
         }
       } catch (Exception e) {
+        LOGGER.error("Error occurred when executing statement {}", statement, e);
         return getTSExecuteStatementResp(TS_StatusCode.ERROR_STATUS, e.getMessage());
       }
 
@@ -514,11 +516,11 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
         physicalPlan = processor.parseSQLToPhysicalPlan(statement, zoneIds.get());
         physicalPlan.setProposer(username.get());
       } catch (IllegalASTFormatException e) {
-        LOGGER.debug("meet error while parsing SQL to physical plan: {}", e.getMessage());
+        LOGGER.debug("meet error while parsing SQL to physical plan: ", e);
         return getTSExecuteStatementResp(TS_StatusCode.ERROR_STATUS,
             "Statement format is not right:" + e.getMessage());
       } catch (NullPointerException e) {
-        LOGGER.error("meet error while parsing SQL to physical plan.", e);
+        LOGGER.error("meet error while parsing SQL to physical plan: ", e);
         return getTSExecuteStatementResp(TS_StatusCode.ERROR_STATUS, "Statement is not allowed");
       }
       if (physicalPlan.isQuery()) {
@@ -527,8 +529,7 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
         return executeUpdateStatement(physicalPlan);
       }
     } catch (Exception e) {
-      LOGGER.info("meet error: {}  while executing statement: {}", e.getMessage(),
-          req.getStatement());
+      LOGGER.info("meet error while executing statement: {}", req.getStatement(), e);
       return getTSExecuteStatementResp(TS_StatusCode.ERROR_STATUS, e.getMessage());
     }
   }
@@ -756,7 +757,7 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
     try {
       execRet = executeNonQuery(plan);
     } catch (ProcessorException e) {
-      LOGGER.debug("meet error while processing non-query. {}", e.getMessage());
+      LOGGER.debug("meet error while processing non-query. ", e);
       return getTSExecuteStatementResp(TS_StatusCode.ERROR_STATUS, e.getMessage());
     }
     TS_StatusCode statusCode = execRet ? TS_StatusCode.SUCCESS_STATUS : TS_StatusCode.ERROR_STATUS;
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/sql/parse/ParseDriver.java b/iotdb/src/main/java/org/apache/iotdb/db/sql/parse/ParseDriver.java
index 6491d4b..9be7d05 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/sql/parse/ParseDriver.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/sql/parse/ParseDriver.java
@@ -97,7 +97,7 @@ public class ParseDriver {
 
       r = parser.statement();
     } catch (RecognitionException e) {
-      LOG.trace("meet error: {} while parsing statement: {}", e.getMessage(), command);
+      LOG.trace("meet error while parsing statement: {}", command, e);
     }
 
     if (lexer.getErrors().isEmpty() && parser.errors.isEmpty()) {
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/utils/RecordUtils.java b/iotdb/src/main/java/org/apache/iotdb/db/utils/RecordUtils.java
index a77a294..5487ff2 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/utils/RecordUtils.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/utils/RecordUtils.java
@@ -106,7 +106,7 @@ public class RecordUtils {
               break;
           }
         } catch (NumberFormatException e) {
-          LOG.warn("parsing measurement meets error, omit it: {}", e.getMessage());
+          LOG.warn("parsing measurement {} meets error, omit it: ", str, e);
         }
       }
     }
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/writelog/manager/MultiFileLogNodeManager.java b/iotdb/src/main/java/org/apache/iotdb/db/writelog/manager/MultiFileLogNodeManager.java
index 8bf9fb9..bf1e816 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/writelog/manager/MultiFileLogNodeManager.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/writelog/manager/MultiFileLogNodeManager.java
@@ -137,12 +137,7 @@ public class MultiFileLogNodeManager implements WriteLogNodeManager, IService {
     nodeList.addAll(nodeMap.values());
     nodeList.sort(null);
     for (WriteLogNode node : nodeList) {
-      try {
-        node.recover();
-      } catch (RecoverException e) {
-        logger.error("{} failed to recover because {}", node.toString(), e.getMessage());
-        throw e;
-      }
+      node.recover();
     }
   }
 
@@ -228,7 +223,7 @@ public class MultiFileLogNodeManager implements WriteLogNodeManager, IService {
       String errorMessage = String
           .format("Failed to start %s because of %s", this.getID().getName(),
               e.getMessage());
-      throw new StartupException(errorMessage);
+      throw new StartupException(errorMessage, e);
     }
   }
 
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/writelog/node/ExclusiveWriteLogNode.java b/iotdb/src/main/java/org/apache/iotdb/db/writelog/node/ExclusiveWriteLogNode.java
index d8e99ae..1b2682f 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/writelog/node/ExclusiveWriteLogNode.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/writelog/node/ExclusiveWriteLogNode.java
@@ -124,7 +124,7 @@ public class ExclusiveWriteLogNode implements WriteLogNode, Comparable<Exclusive
       this.currentFileWriter.close();
       logger.debug("Log node {} closed successfully", identifier);
     } catch (IOException e) {
-      logger.error("Cannot close log node {} because {}", identifier, e.getMessage());
+      logger.error("Cannot close log node {} because:", identifier, e);
     }
     unlockForForceOther();
     unlockForOther();
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/writelog/recover/ExclusiveLogRecoverPerformer.java b/iotdb/src/main/java/org/apache/iotdb/db/writelog/recover/ExclusiveLogRecoverPerformer.java
index 15e88dd..0b58283 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/writelog/recover/ExclusiveLogRecoverPerformer.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/writelog/recover/ExclusiveLogRecoverPerformer.java
@@ -246,10 +246,8 @@ public class ExclusiveLogRecoverPerformer implements RecoverPerformer {
         FileUtils.copyFile(recoverProcessorStoreFile, new File(processorStoreFilePath));
       }
     } catch (Exception e) {
-      logger.error("Log node {} cannot recover processor file, because{}",
-          writeLogNode.getLogDirectory(),
-          e.getMessage());
-      throw new RecoverException("Cannot recover processor file, recovery aborted.");
+      throw new RecoverException(String.format("Log node %s cannot recover processor file,"
+          + " recovery aborted.", writeLogNode.getLogDirectory()), e);
     }
 
     fileNodeRecoverPerformer.recover();
@@ -316,9 +314,8 @@ public class ExclusiveLogRecoverPerformer implements RecoverPerformer {
     try {
       FileNodeManager.getInstance().closeOneFileNode(writeLogNode.getFileNodeName());
     } catch (FileNodeManagerException e) {
-      logger.error("Log node {} cannot perform flush after replaying logs! Because {}",
-          writeLogNode.getIdentifier(), e.getMessage());
-      throw new RecoverException(e);
+      throw new RecoverException(String.format("Log node %s cannot perform flush"
+              + " after replaying logs!", writeLogNode.getIdentifier()), e);
     }
     currStage = CLEAN_UP;
     setFlag(REPLAY_LOG);
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/writelog/replay/ConcreteLogReplayer.java b/iotdb/src/main/java/org/apache/iotdb/db/writelog/replay/ConcreteLogReplayer.java
index 6573884..e45f5cb 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/writelog/replay/ConcreteLogReplayer.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/writelog/replay/ConcreteLogReplayer.java
@@ -57,7 +57,7 @@ public class ConcreteLogReplayer implements LogReplayer {
       }
     } catch (Exception e) {
       throw new ProcessorException(
-          String.format("Cannot replay log %s, because %s", plan.toString(), e.getMessage()));
+          String.format("Cannot replay log %s", plan.toString()), e);
     }
   }
 
diff --git a/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBConnection.java b/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBConnection.java
index 815725a..e94b926 100644
--- a/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBConnection.java
+++ b/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBConnection.java
@@ -410,7 +410,7 @@ public class IoTDBConnection implements Connection {
     try {
       transport.getSocket().setKeepAlive(true);
     } catch (SocketException e) {
-      logger.error("Cannot set socket keep alive because: " + e.getMessage());
+      logger.error("Cannot set socket keep alive because: ", e);
     }
     if (!transport.isOpen()) {
       transport.open();
@@ -447,8 +447,8 @@ public class IoTDBConnection implements Connection {
       }
 
     } catch (TException e) {
-      throw new SQLException(String.format("Can not establish connection with %s. because %s",
-          params.getJdbcUriString(), e.getMessage()));
+      throw new SQLException(String.format("Can not establish connection with %s.",
+          params.getJdbcUriString()), e);
     }
     isClosed = false;
   }
diff --git a/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBStatement.java b/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBStatement.java
index c5e7235..fe56bbc 100644
--- a/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBStatement.java
+++ b/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBStatement.java
@@ -139,7 +139,7 @@ public class IoTDBStatement implements Statement {
         Utils.verifySuccess(closeResp.getStatus());
       }
     } catch (Exception e) {
-      throw new SQLException("Error occurs when canceling statement because " + e.getMessage(), e);
+      throw new SQLException("Error occurs when canceling statement.", e);
     }
     isCancelled = true;
   }
@@ -165,7 +165,7 @@ public class IoTDBStatement implements Statement {
         Utils.verifySuccess(closeResp.getStatus());
       }
     } catch (Exception e) {
-      throw new SQLException("Error occurs when closing statement because " + e.getMessage(), e);
+      throw new SQLException("Error occurs when closing statement.", e);
     }
   }
 
@@ -583,7 +583,7 @@ public class IoTDBStatement implements Statement {
       return resp.getDataType();
     } catch (TException | IoTDBSQLException e) {
       throw new SQLException(
-          String.format("Cannot get column %s data type because %s", columnName, e.getMessage()), e);
+          String.format("Cannot get column %s data type", columnName), e);
     }
   }
 
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/exception/write/PageException.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/exception/write/PageException.java
index c38a25b..eee08ec 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/exception/write/PageException.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/exception/write/PageException.java
@@ -28,4 +28,12 @@ public class PageException extends WriteProcessException {
   public PageException(String msg) {
     super(msg);
   }
+
+  public PageException(String message, Throwable cause) {
+    super(message, cause);
+  }
+
+  public PageException(Throwable cause) {
+    super(cause);
+  }
 }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/exception/write/WriteProcessException.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/exception/write/WriteProcessException.java
index 8b50038..dcadd01 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/exception/write/WriteProcessException.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/exception/write/WriteProcessException.java
@@ -26,15 +26,17 @@ package org.apache.iotdb.tsfile.exception.write;
 public class WriteProcessException extends Exception {
 
   private static final long serialVersionUID = -2664638061585302767L;
-  private final String errMsg;
 
-  public WriteProcessException(String msg) {
-    super(msg);
-    this.errMsg = msg;
+
+  public WriteProcessException(String message, Throwable cause) {
+    super(message, cause);
+  }
+
+  public WriteProcessException(String message) {
+    super(message);
   }
 
-  @Override
-  public String getMessage() {
-    return errMsg;
+  public WriteProcessException(Throwable cause) {
+    super(cause);
   }
 }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/ChunkBuffer.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/ChunkBuffer.java
index 8b0a5f8..4f452a6 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/ChunkBuffer.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/ChunkBuffer.java
@@ -113,7 +113,7 @@ public class ChunkBuffer {
         compressedSize = compressor
             .compress(data.array(), data.position(), data.remaining(), compressedBytes);
       } catch (IOException e) {
-        throw new PageException("Error when writing a page, " + e.getMessage());
+        throw new PageException(e);
       }
     }
 
@@ -133,7 +133,7 @@ public class ChunkBuffer {
     } catch (IOException e) {
       resetTimeStamp();
       throw new PageException(
-          "IO Exception in writeDataPageHeader,ignore this page,error message:" + e.getMessage());
+          "IO Exception in writeDataPageHeader,ignore this page", e);
     }
 
     // update data point num
@@ -153,8 +153,7 @@ public class ChunkBuffer {
       }
       LOG.debug("start to flush a page data into buffer, buffer position {} ", pageBuffer.size());
     } catch (IOException e) {
-      throw new PageException(
-          "meet IO Exception in buffer append,but we cannot understand it:" + e.getMessage());
+      throw new PageException(e);
     }
     return headerSize + uncompressedSize;
   }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/ChunkWriterImpl.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/ChunkWriterImpl.java
index cefc065..1aa9932 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/ChunkWriterImpl.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/ChunkWriterImpl.java
@@ -244,13 +244,10 @@ public class ChunkWriterImpl implements IChunkWriter {
       // update statistics of this series
       this.chunkStatistics.mergeStatistics(this.pageStatistics);
     } catch (IOException e) {
-      LOG.error("meet error in dataPageWriter.getUncompressedBytes(),ignore this page, {}",
-          e.getMessage());
+      LOG.error("meet error in dataPageWriter.getUncompressedBytes(),ignore this page:", e);
     } catch (PageException e) {
       LOG.error(
-          "meet error in chunkBuffer.writePageHeaderAndDataIntoBuff, ignore this page, "
-              + "error message:{}",
-          e.getMessage());
+          "meet error in chunkBuffer.writePageHeaderAndDataIntoBuff, ignore this page:", e);
     } finally {
       // clear start time stamp for next initializing
       minTimestamp = -1;