Sfoglia il codice sorgente

platform: Add stderr redirect

世界 2 anni fa
parent
commit
8699412a4c
2 ha cambiato i file con 30 aggiunte e 1 eliminazioni
  1. 1 1
      experimental/libbox/command_log.go
  2. 29 0
      experimental/libbox/log.go

+ 1 - 1
experimental/libbox/command_log.go

@@ -63,7 +63,7 @@ func (s *CommandServer) handleLogConn(conn net.Conn) error {
 	for {
 		select {
 		case <-ctx.Done():
-			return ctx.Err()
+			return nil
 		case message := <-subscription:
 			err = writeLog(conn, []byte(message))
 			if err != nil {

+ 29 - 0
experimental/libbox/log.go

@@ -0,0 +1,29 @@
+//go:build darwin || linux
+
+package libbox
+
+import (
+	"os"
+
+	"golang.org/x/sys/unix"
+)
+
+var stderrFile *os.File
+
+func RedirectStderr(path string) error {
+	if stats, err := os.Stat(path); err == nil && stats.Size() > 0 {
+		_ = os.Rename(path, path+".old")
+	}
+	outputFile, err := os.Create(path)
+	if err != nil {
+		return err
+	}
+	err = unix.Dup2(int(outputFile.Fd()), int(os.Stderr.Fd()))
+	if err != nil {
+		outputFile.Close()
+		os.Remove(outputFile.Name())
+		return err
+	}
+	stderrFile = outputFile
+	return nil
+}