diff --git a/pkg/pb/logservice/logservice.go b/pkg/pb/logservice/logservice.go
index 8ba1a8abfe54d27f87a3d03d2734d33d50b97182..adec911487d476956651ccbb6c4a7a804fda8e92 100644
--- a/pkg/pb/logservice/logservice.go
+++ b/pkg/pb/logservice/logservice.go
@@ -17,6 +17,7 @@ package logservice
 import (
 	"fmt"
 	"reflect"
+	"sort"
 
 	"github.com/matrixorigin/matrixone/pkg/pb/metadata"
 )
@@ -155,52 +156,44 @@ func (s *LogState) updateShards(hb LogStoreHeartbeat) {
 
 // LogString returns "ServiceType/ConfigChangeType UUID RepUuid:RepShardID:RepID InitialMembers"
 func (m *ScheduleCommand) LogString() string {
-	var serviceType = map[ServiceType]string{
+	c := func(s string) string {
+		if len(s) > 6 {
+			return s[:6]
+		}
+		return s
+	}
+
+	serviceType := map[ServiceType]string{
 		LogService: "L",
 		DnService:  "D",
+	}[m.ServiceType]
+
+	target := c(m.UUID)
+	if m.ConfigChange == nil {
+		return fmt.Sprintf("%s/shutdown %s", serviceType, target)
 	}
 
-	var configChangeType = map[ConfigChangeType]string{
+	configChangeType := map[ConfigChangeType]string{
 		AddReplica:    "Add",
 		RemoveReplica: "Remove",
 		StartReplica:  "Start",
 		StopReplica:   "Stop",
 		KillZombie:    "Kill",
-	}
-	scheUuid := m.UUID
-	if len(m.UUID) > 6 {
-		scheUuid = scheUuid[:6]
-	}
+	}[m.ConfigChange.ChangeType]
 
-	if m.ConfigChange == nil {
-		return fmt.Sprintf("%s/shutdown %s", serviceType[m.ServiceType], scheUuid)
-	}
-
-	repUuid := m.ConfigChange.Replica.UUID
-	if len(repUuid) > 6 {
-		repUuid = repUuid[:6]
-	}
+	replica := c(m.ConfigChange.Replica.UUID)
+	s := fmt.Sprintf("%s/%s %s %s:%d:%d:%d",
+		serviceType, configChangeType, target, replica,
+		m.ConfigChange.Replica.ShardID,
+		m.ConfigChange.Replica.ReplicaID,
+		m.ConfigChange.Replica.Epoch)
 
-	var initMembers map[uint64]string
-	if len(m.ConfigChange.InitialMembers) == 0 {
-		initMembers = nil
-	} else {
-		initMembers = make(map[uint64]string)
+	if len(m.ConfigChange.InitialMembers) != 0 {
+		initMembers := make([]string, 0, len(m.ConfigChange.InitialMembers))
 		for repId, uuid := range m.ConfigChange.InitialMembers {
-			if len(uuid) > 6 {
-				initMembers[repId] = uuid[:6]
-			} else {
-				initMembers[repId] = uuid
-			}
+			initMembers = append(initMembers, fmt.Sprintf("%d:%s", repId, c(uuid)))
 		}
-	}
-
-	s := fmt.Sprintf("%s/%s %s %s:%d:%d:%d", serviceType[m.ServiceType],
-		configChangeType[m.ConfigChange.ChangeType], scheUuid,
-		repUuid, m.ConfigChange.Replica.ShardID,
-		m.ConfigChange.Replica.ReplicaID, m.ConfigChange.Replica.Epoch)
-
-	if initMembers != nil {
+		sort.Strings(initMembers)
 		s += fmt.Sprintf(" %v", initMembers)
 	}
 
diff --git a/pkg/pb/logservice/logservice_test.go b/pkg/pb/logservice/logservice_test.go
index eea29c5a10c7b7750fd9b246bb1d13851974cd3b..bdadfb33f19a43e1a5ae745847b934442c93d071 100644
--- a/pkg/pb/logservice/logservice_test.go
+++ b/pkg/pb/logservice/logservice_test.go
@@ -303,6 +303,24 @@ func TestLogString(t *testing.T) {
 			},
 			expected: "L/Kill storeA storeA:1:0:0",
 		},
+		{
+			desc: "bootstrapping",
+			command: ScheduleCommand{
+				UUID:          "storeA",
+				Bootstrapping: true,
+				ConfigChange: &ConfigChange{
+					Replica: Replica{
+						UUID:      "storeA",
+						ShardID:   1,
+						ReplicaID: 1,
+					},
+					ChangeType:     StartReplica,
+					InitialMembers: map[uint64]string{1: "storeA123", 2: "storeB", 3: "storeC"},
+				},
+				ServiceType: LogService,
+			},
+			expected: "L/Start storeA storeA:1:1:0 [1:storeA 2:storeB 3:storeC]",
+		},
 	}
 
 	for _, c := range cases {