logx

package module
v1.0.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 26, 2025 License: Apache-2.0 Imports: 9 Imported by: 0

README

logx

logx 是一个Go语言实现的简单、灵活的日志模块,提供了多级日志支持、彩色输出、自定义格式和并发安全等功能。

功能特点

  • 支持11个日志级别(从Emergency到Trace)
  • 彩色日志输出,不同级别显示不同颜色
  • 灵活的日志配置(可设置输出级别、调用深度、退出级别等)
  • 全局日志实例,线程安全的单例模式
  • 支持设置日志前缀
  • 支持设置自定义输出目标
  • 支持自定义日志格式化输出
  • 清晰的接口设计,兼容PHP和Golang风格的日志方法
  • 并发安全的实现

文件结构

  • level.go: 定义日志级别枚举和相关方法
  • log.go: 提供全局日志实例和简化的日志函数
  • logger.go: 定义日志接口和核心实现

日志级别

logx 支持以下日志级别,按照代码中定义的顺序(从高到低):

级别 枚举值 颜色 描述 是否导致程序退出
Emergency 0 红色加粗 系统不可用,必须立即处理
Panic 1 红色加粗 严重错误,导致panic
Fatal 2 红色加粗 严重错误,导致程序退出
Alert 3 品红色加粗 必须立即关注,需立刻处理
Critical 4 亮品红色加粗 严重错误,关键功能失败
Error 5 亮红色 一般错误,影响部分功能
Warning/Warn 6 黄色 警告,潜在问题
Notice 7 亮青色 正常但重要的事件
Info 8 白色 普通运行信息
Debug 9 蓝色 调试信息,较详细
Trace 10 亮黑色 跟踪信息,最详细

安装

使用以下命令安装 logx 包:

go get cnb.cool/zhiqiangwang/pkg/logx        # 获取最新 tag 代码
go get cnb.cool/zhiqiangwang/pkg/logx@main # [不推荐]获取最新提交代码

使用示例

全局日志实例
import "cnb.cool/zhiqiangwang/pkg/logx"

// 设置日志级别
logx.SetLevel(logx.InfoLevel)

// 设置日志前缀
logx.SetPrefix("[APP]")

// 设置导致程序退出的日志级别
logx.SetExitLevel([]logx.Level{logx.EmergencyLevel, logx.PanicLevel, logx.FatalLevel})

// 使用不同级别的日志
logx.Info("这是一条信息日志")
logx.Warning("这是一条警告日志")
logx.Error("这是一条错误日志")
logx.Debug("这是一条调试日志") // 由于级别设置为Info,这条不会输出
logx.Trace("这是一条跟踪日志") // 由于级别设置为Info,这条不会输出
创建自定义日志实例
package main

import (
	"cnb.cool/zhiqiangwang/pkg/logx"
	"os"
)

func main() {
	// 创建自定义日志实例,直接使用os.Stderr作为输出目标
	logger := logx.New(logx.DebugLevel, os.Stderr)
	logger.SetPrefix("[CUSTOM]")                       // 设置日志前缀
	logger.SetExitLevel([]logx.Level{logx.EmergencyLevel, logx.FatalLevel}) // 设置触发程序退出的日志级别

	// 使用自定义日志实例
	logger.Info("这是使用自定义日志实例的信息")
	logger.Debug("这是调试信息")
	logger.Trace("这是跟踪信息")
}

// 也可以使用Default()获取默认的日志实例
func defaultLoggerExample() {
	logger := logx.Default()
	logger.Info("这是使用默认日志实例的信息")
}
自定义日志格式

logx 使用 LogEntry 结构体和 FormatFunc 类型来支持自定义日志格式化。LogEntry 包含了完整的日志信息,包括时间、级别、前缀、文件名、行号和消息内容。

import (
	"cnb.cool/zhiqiangwang/pkg/logx"
	"fmt"
	"os"
)

// 自定义日志格式化函数
logx.SetFormatFunc(func(entry logx.LogEntry) string {
	// 自定义格式:[时间] [级别] [前缀] 消息
	return fmt.Sprintf("[%s] [%-9s] [%s] %s", 
		entry.Time.Format("2006-01-02 15:04:05"),
		entry.Level.String(),
		entry.Prefix,
		entry.Message)
})

// 或者在自定义日志实例上设置
logger := logx.New(logx.DebugLevel, os.Stderr)
logger.SetFormatFunc(func(entry logx.LogEntry) string {
	// 自定义格式:<时间> <级别> {前缀} {文件:行号} 消息
	return fmt.Sprintf("<%s> <%s> {%s} {%s:%d} %s", 
		entry.Time.Format("15:04:05"),
		entry.Level.String(),
		entry.Prefix,
		entry.File,
		entry.Line,
		entry.Message)
})

logx.Info("这是使用自定义格式的日志")

注意New 函数接受两个参数:日志级别(Level 类型)和输出目标(io.Writer 类型)。这与标准库的 io 接口兼容,可以将日志输出到文件、网络连接等任何实现了 io.Writer 接口的对象。

LogEntry 结构体

LogEntry 是日志条目的核心数据结构,包含了完整的日志信息:

// LogEntry 日志条目结构体
type LogEntry struct {
	Time      time.Time // 日志发生的时间
	Level     Level     // 日志等级(如 TRACE、INFO、ERROR 等)
	Prefix    string    // 日志前缀,用于区分模块或子系统,可为空
	CallDepth int       // 堆栈深度,用于获取调用源位置(文件和行号)
	File      string    // 日志所在文件路径(相对路径或经过格式化的路径)
	Line      int       // 日志所在文件的行号
	Message   string    // 日志内容正文
}
主要配置方法
  • SetLevel(level Level): 设置日志输出级别,只有小于等于该级别的日志才会输出
  • SetPrefix(p string): 设置日志前缀,方便区分不同模块的日志
  • SetFormatFunc(format FormatFunc): 设置自定义的日志格式化函数
  • SetExitLevel(levels []Level): 设置哪些级别的日志会导致程序退出
  • SetWriter(w io.Writer): 设置日志输出目标,可以是文件、网络连接等
日志输出方法

根据日志级别提供了11个输出方法:

方法名 日志级别 描述 是否导致程序退出
Emergency EmergencyLevel 系统不可用,必须立即处理
Panic PanicLevel 严重错误,导致panic
Fatal FatalLevel 严重错误,导致程序退出
Alert AlertLevel 必须立即关注,需立刻处理
Critical CriticalLevel 严重错误,关键功能失败
Error ErrorLevel 一般错误,影响部分功能
Warning/Warn WarningLevel 警告,潜在问题
Notice NoticeLevel 正常但重要的事件
Info InfoLevel 普通运行信息
Debug DebugLevel 调试信息,较详细
Trace TraceLevel 跟踪信息,最详细

依赖

  • github.com/fatih/color: 提供终端彩色输出功能
  • Go标准库 fmt, os, sync, slices, path/filepath, runtime, time, io

注意事项

  • 默认情况下,全局日志实例的级别设置为TraceLevel,这意味着会输出所有级别的日志
  • 默认情况下,EmergencyLevel、PanicLevel和FatalLevel的日志会导致程序退出
  • 可以通过 SetExitLevel 方法自定义哪些级别的日志会导致程序退出
  • 日志级别设置后,高于该级别的日志将不会输出(例如,设置为InfoLevel时,Debug和Trace级别的日志将不会输出)
  • 设置前缀可以方便地区分不同模块的日志
  • 可以通过 SetWriter 方法自定义日志的输出目标
  • 通过 SetFormatFunc 方法可以完全自定义日志的输出格式
  • 所有公共方法都是并发安全的
  • 全局日志实例使用单例模式确保线程安全

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Alert

func Alert(format string, v ...any)

Alert 必须立即关注,需立刻处理,程序不会退出

func Critical

func Critical(format string, v ...any)

Critical 严重错误,关键功能失败,程序不会退出

func Debug

func Debug(format string, v ...any)

Debug 调试信息,较详细,程序不会退出

func Emergency

func Emergency(format string, v ...any)

Emergency 系统不可用,必须立即处理,程序会退出

func Error

func Error(format string, v ...any)

Error 一般错误,影响部分功能,程序不会退出

func Fatal added in v0.1.4

func Fatal(format string, v ...any)

Fatal 严重错误,导致程序退出,程序会退出

func Info

func Info(format string, v ...any)

Info 普通运行信息,程序不会退出

func Notice

func Notice(format string, v ...any)

Notice 正常但重要的事件,程序不会退出

func Panic added in v0.1.4

func Panic(format string, v ...any)

Panic 严重错误,导致panic,程序会退出

func SetExitLevel added in v0.1.4

func SetExitLevel(levels []Level)

SetExitLevel 设置全局日志退出等级 当日志等级匹配时会触发 os.Exit(1)

func SetFormatFunc added in v0.1.4

func SetFormatFunc(format FormatFunc)

SetFormatFunc 设置全局日志格式化函数

func SetLevel

func SetLevel(level Level)

SetLevel 设置全局日志等级

func SetPrefix added in v0.1.4

func SetPrefix(prefix string)

SetPrefix 设置全局日志前缀

func SetWriter added in v0.1.4

func SetWriter(w io.Writer)

func Trace added in v0.1.4

func Trace(format string, v ...any)

Trace 跟踪信息,最详细,程序不会退出

func Warn added in v0.1.4

func Warn(format string, v ...any)

Warn 警告,潜在问题,程序不会退出

func Warning

func Warning(format string, v ...any)

Warning 警告,潜在问题,程序不会退出

Types

type FormatFunc added in v0.1.4

type FormatFunc func(entry LogEntry) string

FormatFunc 格式化函数类型 输入: 日志条目 输出: 格式化后的日志字符串

type Level

type Level int
const (
	LevelEmergency Level = iota // 系统不可用
	LevelPanic                  // 引发 panic
	LevelFatal                  // 致命错误,程序退出

	LevelAlert    // 必须立即修复
	LevelCritical // 临界错误
	LevelError    // 一般错误
	LevelWarning  // 警告
	LevelNotice   // 正常但需注意
	LevelInfo     // 常规信息
	LevelDebug    // 调试信息
	LevelTrace    // 追踪信息
)

日志级别常量

func (Level) Color

func (l Level) Color() *color.Color

Color 获取日志级别颜色

func (Level) String

func (l Level) String() string

日志级别字符串

type LogEntry added in v0.1.4

type LogEntry struct {
	Time      time.Time // 日志生成的时间点
	Level     Level     // 实际日志等级(如 TRACE、INFO、ERROR 等)
	SetLevel  Level     // 配置或设置的日志等级,用于过滤输出
	Prefix    string    // 日志前缀,可用于标识模块或子系统,可为空
	CallDepth int       // 调用堆栈深度,用于定位日志来源(文件和行号)
	File      string    // 日志来源文件路径,可为相对路径或经过格式化的路径
	Line      int       // 日志来源行号
	Message   string    // 日志正文内容
}

LogEntry 日志条目结构体

type Logger

type Logger struct {
	CallDepth int // 用于 runtime.Caller 输出调用堆栈深度
	// contains filtered or unexported fields
}

Logger 日志结构体 - 支持多等级日志 - 并发安全 - 支持彩色输出 - 可自定义日志格式

func New

func New(level Level, w io.Writer) *Logger

New 创建一个 Logger 实例

func (*Logger) Alert

func (l *Logger) Alert(format string, v ...any)

func (*Logger) Critical

func (l *Logger) Critical(format string, v ...any)

func (*Logger) Debug

func (l *Logger) Debug(format string, v ...any)

func (*Logger) Emergency

func (l *Logger) Emergency(format string, v ...any)

func (*Logger) Error

func (l *Logger) Error(format string, v ...any)

func (*Logger) Fatal added in v0.1.4

func (l *Logger) Fatal(format string, v ...any)

func (*Logger) Info

func (l *Logger) Info(format string, v ...any)

func (*Logger) Notice

func (l *Logger) Notice(format string, v ...any)

func (*Logger) Panic added in v0.1.4

func (l *Logger) Panic(format string, v ...any)

func (*Logger) SetExitLevel

func (l *Logger) SetExitLevel(levels []Level)

SetExitLevel 设置日志等级触发 os.Exit(线程安全)

func (*Logger) SetFormatFunc added in v0.1.4

func (l *Logger) SetFormatFunc(format FormatFunc)

SetFormatFunc 设置日志格式化函数(线程安全)

func (*Logger) SetLevel

func (l *Logger) SetLevel(level Level)

SetLevel 设置日志输出等级(线程安全)

func (*Logger) SetPrefix added in v0.1.4

func (l *Logger) SetPrefix(p string)

SetPrefix 设置日志前缀(线程安全)

func (*Logger) SetWriter added in v0.1.4

func (l *Logger) SetWriter(w io.Writer)

SetWriter 设置日志输出 io.Writer

func (*Logger) Trace added in v0.1.4

func (l *Logger) Trace(format string, v ...any)

func (*Logger) Warn added in v0.1.4

func (l *Logger) Warn(format string, v ...any)

func (*Logger) Warning

func (l *Logger) Warning(format string, v ...any)

Source Files

  • format.go
  • level.go
  • log.go
  • logger.go

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL