diff --git a/cmd/flags/server.go b/cmd/flags/server.go index 3098058..6e4009e 100644 --- a/cmd/flags/server.go +++ b/cmd/flags/server.go @@ -3,4 +3,5 @@ package flags var ( DisableUpdateCheck bool DisableWeb bool + DisableLogColor bool ) diff --git a/cmd/server.go b/cmd/server.go index 38aec5f..993e743 100644 --- a/cmd/server.go +++ b/cmd/server.go @@ -26,8 +26,8 @@ var ServerCmd = &cobra.Command{ boot := bootstrap.New(bootstrap.WithContext(cmd.Context())).Add( bootstrap.InitSysNotify, bootstrap.InitConfig, - bootstrap.InitLog, bootstrap.InitGinMode, + bootstrap.InitLog, bootstrap.InitDatabase, bootstrap.InitProvider, bootstrap.InitOp, @@ -161,4 +161,5 @@ func init() { RootCmd.AddCommand(ServerCmd) ServerCmd.PersistentFlags().BoolVar(&flags.DisableUpdateCheck, "disable-update-check", false, "disable update check") ServerCmd.PersistentFlags().BoolVar(&flags.DisableWeb, "disable-web", false, "disable web") + ServerCmd.PersistentFlags().BoolVar(&flags.DisableLogColor, "disable-log-color", false, "disable log color") } diff --git a/internal/bootstrap/db.go b/internal/bootstrap/db.go index 5f3633e..fa01cd1 100644 --- a/internal/bootstrap/db.go +++ b/internal/bootstrap/db.go @@ -145,7 +145,7 @@ func newDBLogger() logger.Interface { LogLevel: logLevel, IgnoreRecordNotFoundError: true, ParameterizedQueries: !flags.Dev && version.Version != "dev", - Colorful: true, + Colorful: utils.ForceColor(), }, ) } diff --git a/internal/bootstrap/gin.go b/internal/bootstrap/gin.go index fc96141..9ad4db3 100644 --- a/internal/bootstrap/gin.go +++ b/internal/bootstrap/gin.go @@ -5,6 +5,7 @@ import ( "github.com/gin-gonic/gin" "github.com/synctv-org/synctv/cmd/flags" + "github.com/synctv-org/synctv/utils" ) func InitGinMode(ctx context.Context) error { @@ -13,7 +14,11 @@ func InitGinMode(ctx context.Context) error { } else { gin.SetMode(gin.ReleaseMode) } - gin.ForceConsoleColor() + if utils.ForceColor() { + gin.ForceConsoleColor() + } else { + gin.DisableConsoleColor() + } return nil } diff --git a/internal/bootstrap/log.go b/internal/bootstrap/log.go index 9c4872a..81188d0 100644 --- a/internal/bootstrap/log.go +++ b/internal/bootstrap/log.go @@ -26,6 +26,7 @@ func setLog(l *logrus.Logger) { func InitLog(ctx context.Context) (err error) { setLog(logrus.StandardLogger()) + forceColor := utils.ForceColor() if conf.Conf.Log.Enable { conf.Conf.Log.FilePath, err = utils.OptFilePath(conf.Conf.Log.FilePath) if err != nil { @@ -57,13 +58,10 @@ func InitLog(ctx context.Context) (err error) { if conf.Conf.Log.LogFormat != "text" { logrus.Warnf("unknown log format: %s, use default: text", conf.Conf.Log.LogFormat) } - if colorable.IsTerminal(os.Stdout.Fd()) { - logrus.SetFormatter(&logrus.TextFormatter{ - ForceColors: true, - }) - } else { - logrus.SetFormatter(&logrus.TextFormatter{}) - } + logrus.SetFormatter(&logrus.TextFormatter{ + ForceColors: forceColor, + DisableColors: !forceColor, + }) } log.SetOutput(logrus.StandardLogger().Writer()) return nil diff --git a/utils/utils.go b/utils/utils.go index 70ca11a..16f8d60 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -16,6 +16,7 @@ import ( "github.com/google/uuid" "github.com/synctv-org/synctv/cmd/flags" + "github.com/zijiren233/go-colorable" "github.com/zijiren233/stream" yamlcomment "github.com/zijiren233/yaml-comment" "gopkg.in/yaml.v3" @@ -342,3 +343,18 @@ func GetUrlExtension(u string) string { } return strings.TrimLeft(filepath.Ext(p.Path), ".") } + +var needColor atomic.Pointer[bool] + +func ForceColor() bool { + b := needColor.Load() + if b == nil { + forceColor := colorable.IsTerminal(os.Stdout.Fd()) + if flags.DisableLogColor { + forceColor = false + } + needColor.Store(&forceColor) + return forceColor + } + return *b +}