添加cmd彩色输出设置。
This commit is contained in:
10
golang/logUse/ansi/ansi_support.go
Normal file
10
golang/logUse/ansi/ansi_support.go
Normal file
@@ -0,0 +1,10 @@
|
||||
//go:build !windows
|
||||
// +build !windows
|
||||
|
||||
package ansi
|
||||
|
||||
// EnableANSIConsole 启用控制台 ANSI 转义序列支持
|
||||
// 在非 Windows 系统上,默认已支持 ANSI 转义序列
|
||||
func EnableANSIConsole() bool {
|
||||
return true
|
||||
}
|
||||
49
golang/logUse/ansi/ansi_support_win.go
Normal file
49
golang/logUse/ansi/ansi_support_win.go
Normal 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
79
golang/logUse/logUse.go
Normal 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")
|
||||
}
|
||||
Reference in New Issue
Block a user