添加cmd彩色输出设置。

This commit is contained in:
2026-03-23 11:01:29 +08:00
parent b7a99f6425
commit d18880c473
3 changed files with 59 additions and 0 deletions

View File

@@ -0,0 +1,10 @@
//go:build !windows
// +build !windows
package ansi
// EnableANSIConsole 启用控制台 ANSI 转义序列支持
// 在非 Windows 系统上,默认已支持 ANSI 转义序列
func EnableANSIConsole() bool {
return true
}

View File

@@ -0,0 +1,49 @@
//go:build windows
// +build windows
package ansi
import (
"syscall"
"unsafe"
)
// Windows API 常量定义
const (
STD_OUTPUT_HANDLE = uintptr(4294967285) // -11
ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x0004
)
var (
kernel32 = syscall.NewLazyDLL("kernel32.dll")
procGetStdHandle = kernel32.NewProc("GetStdHandle")
procGetConsoleMode = kernel32.NewProc("GetConsoleMode")
procSetConsoleMode = kernel32.NewProc("SetConsoleMode")
)
// EnableANSIConsole 启用 Windows 控制台 ANSI 转义序列支持
func EnableANSIConsole() bool {
// 获取标准输出句柄
stdout, _, _ := procGetStdHandle.Call(STD_OUTPUT_HANDLE)
if stdout == 0 || stdout == uintptr(syscall.InvalidHandle) {
return false
}
// 获取当前控制台模式
var mode uint32
ret, _, _ := procGetConsoleMode.Call(stdout, uintptr(unsafe.Pointer(&mode)))
if ret == 0 {
return false
}
// 启用虚拟终端处理
mode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING
// 设置新的控制台模式
ret, _, _ = procSetConsoleMode.Call(stdout, uintptr(mode))
if ret == 0 {
return false
}
return true
}

79
golang/logUse/logUse.go Normal file
View File

@@ -0,0 +1,79 @@
package main
import (
"os"
nested "github.com/antonfisher/nested-logrus-formatter"
"github.com/sirupsen/logrus"
"gopkg.in/natefinch/lumberjack.v2"
)
type FileHook struct {
formatter logrus.Formatter
fileLogger *lumberjack.Logger
}
func (hook *FileHook) Fire(entry *logrus.Entry) error {
line, err := hook.formatter.Format(entry)
if err != nil {
return err
}
_, err = hook.fileLogger.Write(line)
return err
}
func (hook *FileHook) Levels() []logrus.Level {
return logrus.AllLevels
}
func main() {
// 创建文件输出
fileLogger := &lumberjack.Logger{
Filename: "logrus.log",
MaxSize: 1,
MaxBackups: 3,
MaxAge: 30,
Compress: true,
}
// 创建 nested 格式化器(文件用)
fileFormatter := &nested.Formatter{
HideKeys: true,
FieldsOrder: []string{"component", "category"},
NoColors: true, // 文件不要颜色
ShowFullLevel: true, // 显示完整级别
TimestampFormat: "2006-01-02 15:04:05.000",
}
// 文件 Hook
fileHook := &FileHook{
fileLogger: fileLogger,
formatter: fileFormatter,
}
logrus.AddHook(fileHook)
// 显示具体日志位置。
//logrus.SetReportCaller(true)
// 控制台输出(带颜色)
logrus.SetOutput(os.Stdout)
logrus.SetFormatter(&nested.Formatter{
HideKeys: true,
FieldsOrder: []string{"component", "category"},
NoColors: false, // 控制台带颜色
})
logrus.SetLevel(logrus.InfoLevel)
// 记录日志
logrus.Info("This is an info message")
logrus.Warn("This is a warning message")
logrus.Error("This is an error message")
// 测试带字段的日志
logrus.WithFields(logrus.Fields{
"component": "auth",
"user_id": 12345,
"ip": "192.168.1.100",
}).Info("User login success")
}