diff --git a/obfs4proxy/log.go b/obfs4proxy/log.go
index 22f345cf5b0f9e01877696b66087b6181f5ae9ed..5440596dbb0b284eb8d015cf9221ea8dbd16412a 100644
--- a/obfs4proxy/log.go
+++ b/obfs4proxy/log.go
@@ -41,6 +41,13 @@ const (
 
 var logLevel = levelInfo
 
+func noticef(format string, a ...interface{}) {
+	if enableLogging {
+		msg := fmt.Sprintf(format, a...)
+		log.Print("[NOTICE]: " + msg)
+	}
+}
+
 func errorf(format string, a ...interface{}) {
 	if enableLogging && logLevel >= levelError {
 		msg := fmt.Sprintf(format, a...)
diff --git a/obfs4proxy/obfs4proxy.go b/obfs4proxy/obfs4proxy.go
index 7e8aad08a471153f89490c3fbfa81869a7de4431..cf8043a7a5d02046160f96f1a00bf44196d9469c 100644
--- a/obfs4proxy/obfs4proxy.go
+++ b/obfs4proxy/obfs4proxy.go
@@ -383,9 +383,8 @@ func ptInitializeLogging(enable bool) error {
 	return nil
 }
 
-func version() {
-	fmt.Printf("obfs4proxy-%s\n", obfs4proxyVersion)
-	os.Exit(0)
+func getVersion() string {
+	return fmt.Sprintf("obfs4proxy-%s", obfs4proxyVersion)
 }
 
 func main() {
@@ -398,7 +397,8 @@ func main() {
 	flag.Parse()
 
 	if *showVer {
-		version()
+		fmt.Printf("%s\n", getVersion())
+		os.Exit(0)
 	}
 	if err := setLogLevel(*logLevelStr); err != nil {
 		log.Fatalf("[ERROR]: failed to set log level: %s", err)
@@ -418,6 +418,8 @@ func main() {
 	}
 	if err = ptInitializeLogging(enableLogging); err != nil {
 		log.Fatalf("[ERROR]: %s - failed to initialize logging", execName)
+	} else {
+		noticef("%s - launched", getVersion())
 	}
 	if isClient {
 		infof("%s - initializing client transport listeners", execName)
@@ -432,9 +434,9 @@ func main() {
 		os.Exit(-1)
 	}
 
-	infof("%s - launched and accepting connections", execName)
+	infof("%s - accepting connections", execName)
 	defer func() {
-		infof("%s - terminated", execName)
+		noticef("%s - terminated", execName)
 	}()
 
 	// At this point, the pt config protocol is finished, and incoming