ALog 是一个轻量级、高性能的 Go 语言日志库,提供了灵活的日志格式配置和多种输出方式,支持自定义日志字段和输出目标。
go get -u github.com/Aceak/ALogpackage main
import (
"github.com/Aceak/ALog"
)
func main() {
alog.Trace("This is a trace message")
alog.Debug("This is a debug message")
alog.Info("This is an info message")
alog.Warn("This is a warning message")
alog.Error("This is an error message")
// alog.Panic("This will cause panic")
// alog.Fatal("This will cause fatal exit")
}2024-01-01 12:00:00 UTC INFO [main.go:10] This is an info message
2024-01-01 12:00:00 UTC WARN [main.go:11] This is a warning message
2024-01-01 12:00:00 UTC ERROR [main.go:12] This is an error message
package main
import (
"github.com/Aceak/ALog"
)
func main() {
// 创建自定义日志器
logger := alog.NewLogger(
alog.DEBUG, // 设置日志级别为 DEBUG
alog.NewFormatter(" | ", // 设置字段分隔符
alog.NewTimeField("2006-01-02 15:04:05"), // 时间字段
alog.NewLevelField("lower"), // 日志级别字段,小写格式
alog.NewFileLineField("", ""), // 文件行号字段
alog.NewMsgField(), // 日志消息字段
),
alog.NewConsoleSink(), // 控制台输出
)
// 使用自定义日志器
logger.Debug("This is a debug message")
logger.Info("This is an info message")
}ALog 支持通过字段组合来自定义日志格式,内置了多种日志字段:
| 字段类型 | 说明 | 示例 |
|---|---|---|
| TimeField | 时间字段 | NewTimeField("2006-01-02 15:04:05") |
| LevelField | 日志级别字段 | NewLevelField("upper") |
| MsgField | 日志消息字段 | NewMsgField() |
| FileField | 文件路径字段 | NewFileField() |
| ShortFileField | 短文件名字段 | NewShortFileField() |
| LineField | 行号字段 | NewLineField() |
| FileLineField | 文件行号组合字段 | NewFileLineField("[", "]") |
| PIDField | 进程 ID 字段 | NewPIDField() |
| GIDField | Goroutine ID 字段 | NewGIDField() |
| TimeStampField | 时间戳字段 | NewTimeStampField() |
| TimeZoneField | 时区字段 | NewTimeZoneField() |
| TraceIDField | 追踪 ID 字段 | NewTraceIDField() |
| RequestIDField | 请求 ID 字段 | NewRequestIDField() |
| RawMsgField | 原始消息字段 | NewRawMsgField() |
| ExtField | 扩展字段 | NewExtField() |
ALog 支持以下日志级别(按优先级从低到高):
| 级别 | 说明 |
|---|---|
| TRACE | TRACE 级别,用于详细的调试信息 |
| DEBUG | DEBUG 级别,用于开发阶段的调试信息 |
| INFO | INFO 级别,用于普通的运行时信息 |
| WARN | WARN 级别,用于潜在的问题 |
| ERROR | ERROR 级别,用于错误信息 |
| PANIC | PANIC 级别,用于导致程序崩溃的错误 |
| FATAL | FATAL 级别,记录后会触发程序退出 |
level := alog.ParseLevel("debug") // 返回 alog.DEBUGlogger := alog.NewLogger(alog.INFO, formatter, sink)
// 日志级别可以通过 ParseLevel 动态设置
logger.SetLevel(alog.ParseLevel("debug"))ALog 支持通过实现 Sink 接口来自定义输出目标:
type MySink struct {
// 自定义字段
}
func (s *MySink) Write(line string) {
// 实现自定义输出逻辑
fmt.Println("Custom sink:", line)
}
// 使用自定义 Sink
logger := alog.NewLogger(alog.INFO, formatter, &MySink{})package main
import (
"github.com/Aceak/ALog"
)
// 初始化自定义日志器
var logger = alog.NewLogger(
alog.Info,
alog.NewFormatter(" | ",
alog.NewTimeField("2006-01-02 15:04:05"),
alog.NewLevelField("upper"),
alog.NewFileLineField("[", "]"),
alog.NewMsgField(),
),
alog.NewConsoleSink(),
)
func main() {
logger.Info("Application started")
// 业务逻辑
logger.Info("Application exited")
}func init() {
level := alog.Info
if os.Getenv("ENV") == "development" {
level = alog.Debug
}
logger = alog.NewLogger(level, formatter, sink)
}- ALog 使用了高效的字符串构建器
strings.Builder来格式化日志 - 日志级别检查在最开始进行,低于当前级别的日志会被快速跳过
- 支持异步输出(通过自定义 Sink 实现)
ALog 是一个简单易用、功能丰富的 Go 语言日志库,提供了灵活的配置选项和良好的扩展性。它适合各种规模的 Go 项目使用,从简单的命令行工具到复杂的分布式系统。
通过合理配置日志格式和级别,可以帮助开发者更好地理解系统运行状态,快速定位和解决问题。