From 8f9a396821d5fdbc219ba404e00849e6408f6cc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BA=90=E6=96=87=E9=9B=A8?= <41315874+fumiama@users.noreply.github.com> Date: Wed, 1 Mar 2023 21:13:18 +0800 Subject: [PATCH] fix: platform that fails to set vt100 --- console/{console.go => console_ansi.go} | 2 ++ console/console_windows.go | 25 ++++++++++++++++--------- 2 files changed, 18 insertions(+), 9 deletions(-) rename console/{console.go => console_ansi.go} (92%) diff --git a/console/console.go b/console/console_ansi.go similarity index 92% rename from console/console.go rename to console/console_ansi.go index 5c0d5048..f171297e 100644 --- a/console/console.go +++ b/console/console_ansi.go @@ -1,3 +1,5 @@ +//go:build !windows + // Package console sets console's behavior on init package console diff --git a/console/console_windows.go b/console/console_windows.go index 5727ac42..6280150a 100644 --- a/console/console_windows.go +++ b/console/console_windows.go @@ -1,3 +1,4 @@ +// Package console sets console's behavior on init package console import ( @@ -72,11 +73,11 @@ func init() { mode |= windows.ENABLE_PROCESSED_OUTPUT // 启用处理后的输出 err = windows.SetConsoleMode(stdout, mode) - if err != nil { - panic(err) - } // windows 带颜色 log 自定义格式 - logrus.SetFormatter(&LogFormat{}) + logrus.SetFormatter(&logFormat{hasColor: err == nil}) + if err != nil { + logrus.Warnln("VT100设置失败, 将以无色模式输出") + } err = setConsoleTitle("ZeroBot-Blugin " + banner.Version + " " + banner.Copyright) if err != nil { @@ -95,17 +96,23 @@ const ( colorReset = "\x1b[0m" ) -// LogFormat specialize for zbp -type LogFormat struct{} +// logFormat specialize for zbp +type logFormat struct { + hasColor bool +} // Format implements logrus.Formatter -func (f LogFormat) Format(entry *logrus.Entry) ([]byte, error) { +func (f logFormat) Format(entry *logrus.Entry) ([]byte, error) { buf := new(bytes.Buffer) buf.WriteByte('[') - buf.WriteString(getLogLevelColorCode(entry.Level)) + if hasColor { + buf.WriteString(getLogLevelColorCode(entry.Level)) + } buf.WriteString(strings.ToUpper(entry.Level.String())) - buf.WriteString(colorReset) + if hasColor { + buf.WriteString(colorReset) + } buf.WriteString("] ") buf.WriteString(entry.Message) buf.WriteString(" \n")