diff --git a/shapeshifter.go b/shapeshifter.go
index 5387a6d2ade00351c41037004a6b3b5a86d0b4ca..f201e0702638f4268eaf9ab8ae747cc58efa4f62 100644
--- a/shapeshifter.go
+++ b/shapeshifter.go
@@ -13,11 +13,16 @@ import (
 	"golang.org/x/net/proxy"
 )
 
+type Logger interface {
+	Log(msg string)
+}
+
 type ShapeShifter struct {
 	Cert      string
 	IatMode   int
 	Target    string // remote ip:port obfs4 server
 	SocksAddr string // -proxylistenaddr in shapeshifter-dispatcher
+	Logger    Logger
 	ln        net.Listener
 	errChan   chan error
 }
@@ -54,13 +59,6 @@ func (ss *ShapeShifter) GetErrorChannel() chan error {
 	return ss.errChan
 }
 
-func (ss *ShapeShifter) GetLastError() error {
-	if ss.errChan == nil {
-		ss.errChan = make(chan error, 2)
-	}
-	return <-ss.errChan
-}
-
 func (ss ShapeShifter) clientAcceptLoop() error {
 	for {
 		conn, err := ss.ln.Accept()
@@ -147,6 +145,11 @@ func (ss *ShapeShifter) checkOptions() error {
 }
 
 func (ss *ShapeShifter) sendError(format string, a ...interface{}) {
+	if ss.Logger != nil {
+		ss.Logger.Log(fmt.Sprintf(format, a...))
+		return
+	}
+
 	if ss.errChan == nil {
 		ss.errChan = make(chan error, 2)
 	}