fastlog

package module
v1.2.1 Latest Latest
Warning

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

Go to latest
Published: Jul 1, 2025 License: GPL-2.0 Imports: 13 Imported by: 0

README

FastLog - 高性能 Go 日志库

License

FastLog是一个高性能、异步、可扩展的 Go 语言日志库,支持多种日志格式和级别,提供文件和控制台双输出。

DeepWiKi介绍

托管平台

功能特性

  • 🚀 异步非阻塞日志记录
  • 📁 支持文件和控制台双输出
  • 🎨 内置彩色日志输出
  • 🔍 多级别日志(DEBUG/INFO/SUCCESS/WARN/ERROR)
  • 📝 多种日志格式(JSON/详细/方括号/协程)
  • ⏱️ 定时自动刷新缓冲区
  • 🛡️ 线程安全设计
  • 🔄 自动日志轮转功能
  • 🔧 可配置的日志切割策略

API 文档

安装与引入

# 确保在自己项目路径下,并且存在go.mog文件,不存在则 go init 项目名 创建
go get gitee.com/MM-Q/fastlog

# 引入 
import "gitee.com/MM-Q/fastlog"

快速开始

使用默认的配置示例
package main

import "gitee.com/MM-Q/fastlog"

func main() {
    // 仅指定日志目录和文件名的简化配置
    config2 := fastlog.NewFastLogConfig("custom_logs", "custom.log")

    // 创建日志实例
    logger, err := fastlog.NewFastLog(config2)
    if err != nil {
        panic(err)
    }
    defer logger.Close()

    // 记录日志
    logger.Info("这是一条信息日志")
    logger.Debugf("调试信息: %s", "value")
    logger.Error("发生了一个错误")
}

日志轮转功能

FastLog 提供了自动日志轮转功能,当满足以下条件时会自动创建新的日志文件:

  1. 当前日志文件大小超过MaxLogFileSize设置的值

轮转后的日志文件会以原文件名加上时间的形式保存,例如:app-2025-05-01T00-16-27.372.log

NoColor功能

FastLog支持通过设置NoColor属性为true来全局禁用颜色输出。当NoColortrue时,所有日志输出将直接显示原始文本,不添加任何颜色代码。

使用方法
// 创建日志配置
cfg := fastlog.NewFastLogConfig("logs", "nocolor.log")
cfg.SetNoColor(true) // 禁用终端颜色

// 创建日志实例
logger, err := fastlog.NewFastLog(cfg)
if err != nil {
    panic(err)
}
defer logger.Close()

// 此时所有日志输出将不会有颜色
logger.Info("这是一条无颜色信息日志")
logger.Error("这是一条无颜色错误日志")
使用场景
  • 当终端不支持ANSI颜色代码时
  • 需要将输出重定向到文件时
  • 其他需要禁用颜色的场景

日志格式

FastLog 支持以下几种日志格式:

格式名称 说明
Json 以 JSON 格式输出日志
Bracket 以方括号格式输出日志
Detailed 详细格式,包含时间、级别、文件、函数、行号等信息
Threaded 包含线程 ID 的详细格式
Simple 简单格式,仅包含时间、级别和消息
Custom 自定义格式,通过类似于 fmt.Printf()格式进行自定义
  1. Detailed (默认)
2023-01-01 12:00:00 | INFO    | main.go:main:10 - 日志信息
  1. Json
{
  "time": "2023-01-01 12:00:00",
  "level": "INFO",
  "file": "main.go",
  "function": "main",
  "line": "10",
  "thread": "1",
  "message": "日志信息"
}
  1. Bracket
[INFO] 日志信息
  1. Threaded
2023-01-01 12:00:00 | INFO    | [thread="1"] 日志信息
  1. Simple
2023-01-01 12:00:00 | INFO    | 日志信息
  1. Custom (自定义格式)
当配置为Custom时,请使用自定义格式,通过类似于fmt.Printf()格式进行自定义,然后传递给日志方法。

性能优化

  • 异步处理:所有日志操作通过 channel 异步处理
  • 缓冲区:使用内存缓冲区减少 IO 操作
  • 批量写入:定时刷新缓冲区
  • 内存优化:减少内存分配次数
  • 并发控制:优化锁粒度提升并发性能

函数

函数名称 参数类型 返回值类型 说明
NewFastLogConfig logDirPath string, logFileName string *FastLogConfig 创建一个日志配置器,日志目录和日志文件名为必需参数。
NewFastLog cfg *FastLogConfig (*FastLog, error) 根据配置创建一个新的日志记录器。

方法

以下是将 FastLogInterface 中的方法及其说明:

方法名称 参数类型 说明
Close 关闭日志记录器。
Info v ...interface{} 记录信息级别的日志,不支持占位符,需要自己拼接。
Warn v ...interface{} 记录警告级别的日志,不支持占位符,需要自己拼接。
Error v ...interface{} 记录错误级别的日志,不支持占位符,需要自己拼接。
Success v ...interface{} 记录成功级别的日志,不支持占位符,需要自己拼接。
Debug v ...interface{} 记录调试级别的日志,不支持占位符,需要自己拼接。
Fatal v ...interface{} 记录致命级别的日志,不支持占位符,调用后程序会退出。
Infof format string, v ...interface{} 记录信息级别的日志,支持占位符,格式化。
Warnf format string, v ...interface{} 记录警告级别的日志,支持占位符,格式化。
Errorf format string, v ...interface{} 记录错误级别的日志,支持占位符,格式化。
Successf format string, v ...interface{} 记录成功级别的日志,支持占位符,格式化。
Debugf format string, v ...interface{} 记录调试级别的日志,支持占位符,格式化。
Fatalf format string, v ...interface{} 记录致命级别的日志,支持占位符,格式化,调用后程序会退出。

Documentation

Overview

用于存放fastlog的方法

定义全局常量变量或结构体

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type FastLog added in v1.1.3

type FastLog struct {
	// contains filtered or unexported fields
}

日志记录器

func NewFastLog added in v1.1.3

func NewFastLog(config *FastLogConfig) (*FastLog, error)

NewFastLog 创建一个新的FastLog实例, 用于记录日志。 参数:

  • config: 一个指向FastLogConfig实例的指针, 用于配置日志记录器。

返回值:

  • *FastLog: 一个指向FastLog实例的指针。
  • error: 如果创建日志记录器失败, 则返回一个错误。

func (*FastLog) Close added in v1.1.3

func (f *FastLog) Close() error

Close 关闭FastLog实例, 并等待所有日志处理完成。

func (*FastLog) Debug added in v1.1.3

func (l *FastLog) Debug(v ...any)

debug 记录调试级别的日志,不支持占位符

func (*FastLog) Debugf added in v1.1.3

func (l *FastLog) Debugf(format string, v ...any)

Debugf 记录调试级别的日志,支持占位符,格式化

func (*FastLog) Error added in v1.1.3

func (l *FastLog) Error(v ...any)

Error 记录错误级别的日志,不支持占位符

func (*FastLog) Errorf added in v1.1.3

func (l *FastLog) Errorf(format string, v ...any)

Errorf 记录错误级别的日志,支持占位符,格式化

func (*FastLog) Fatal added in v1.2.0

func (l *FastLog) Fatal(v ...any)

Fatal 记录致命级别的日志,不支持占位符,发送后关闭日志记录器

func (*FastLog) Fatalf added in v1.2.0

func (l *FastLog) Fatalf(format string, v ...any)

Fatalf 记录致命级别的日志,支持占位符,发送后关闭日志记录器

func (*FastLog) Info added in v1.1.3

func (l *FastLog) Info(v ...any)

Info 记录信息级别的日志,不支持占位符

func (*FastLog) Infof added in v1.1.3

func (l *FastLog) Infof(format string, v ...any)

Infof 记录信息级别的日志,支持占位符,格式化

func (*FastLog) Success added in v1.1.3

func (l *FastLog) Success(v ...any)

Success 记录成功级别的日志,不支持占位符

func (*FastLog) Successf added in v1.1.3

func (l *FastLog) Successf(format string, v ...any)

Successf 记录成功级别的日志,支持占位符,格式化

func (*FastLog) Warn added in v1.1.3

func (l *FastLog) Warn(v ...any)

Warn 记录警告级别的日志,不支持占位符

func (*FastLog) Warnf added in v1.1.3

func (l *FastLog) Warnf(format string, v ...any)

Warnf 记录警告级别的日志,支持占位符,格式化

type FastLogConfig added in v1.1.3

type FastLogConfig struct {
	// contains filtered or unexported fields
}

定义一个配置结构体,用于配置日志记录器

func NewFastLogConfig added in v1.1.5

func NewFastLogConfig(logDirName string, logFileName string) *FastLogConfig

NewFastLogConfig 创建一个新的FastLogConfig实例, 用于配置日志记录器。 参数:

  • logDirName: 日志目录名称, 默认为"applogs"。
  • logFileName: 日志文件名称, 默认为"app.log"。

返回值:

  • *FastLogConfig: 一个指向FastLogConfig实例的指针。

func (*FastLogConfig) GetChanIntSize added in v1.2.0

func (c *FastLogConfig) GetChanIntSize() int

GetChanIntSize 获取通道大小

func (*FastLogConfig) GetConsoleOnly added in v1.2.0

func (c *FastLogConfig) GetConsoleOnly() bool

GetConsoleOnly 获取是否仅输出到控制台的状态

func (*FastLogConfig) GetEnableCompress added in v1.2.0

func (c *FastLogConfig) GetEnableCompress() bool

GetEnableCompress 获取是否启用日志文件压缩的状态

func (*FastLogConfig) GetFlushInterval added in v1.2.0

func (c *FastLogConfig) GetFlushInterval() time.Duration

GetFlushInterval 获取刷新间隔

func (*FastLogConfig) GetIsLocalTime added in v1.2.0

func (c *FastLogConfig) GetIsLocalTime() bool

GetIsLocalTime 获取是否使用本地时间的状态

func (*FastLogConfig) GetLogDirName added in v1.2.0

func (c *FastLogConfig) GetLogDirName() string

GetLogDirName 获取日志目录路径

func (*FastLogConfig) GetLogFileName added in v1.2.0

func (c *FastLogConfig) GetLogFileName() string

GetLogFileName 获取日志文件名

func (*FastLogConfig) GetLogFormat added in v1.2.0

func (c *FastLogConfig) GetLogFormat() LogFormatType

GetLogFormat 获取日志格式选项

func (*FastLogConfig) GetLogLevel added in v1.2.0

func (c *FastLogConfig) GetLogLevel() LogLevel

GetLogLevel 获取日志级别

func (*FastLogConfig) GetMaxBufferSize added in v1.2.0

func (c *FastLogConfig) GetMaxBufferSize() int

GetMaxBufferSize 获取最大缓冲区大小(MB)

func (*FastLogConfig) GetMaxLogAge added in v1.2.0

func (c *FastLogConfig) GetMaxLogAge() int

GetMaxLogAge 获取最大日志文件保留天数

func (*FastLogConfig) GetMaxLogBackups added in v1.2.0

func (c *FastLogConfig) GetMaxLogBackups() int

GetMaxLogBackups 获取最大日志文件保留数量

func (*FastLogConfig) GetMaxLogFileSize added in v1.2.0

func (c *FastLogConfig) GetMaxLogFileSize() int

GetMaxLogFileSize 获取最大日志文件大小(MB)

func (*FastLogConfig) GetNoBold added in v1.2.0

func (c *FastLogConfig) GetNoBold() bool

GetNoBold 获取是否禁用终端字体加粗的状态

func (*FastLogConfig) GetNoColor added in v1.2.0

func (c *FastLogConfig) GetNoColor() bool

GetNoColor 获取是否禁用终端颜色的状态

func (*FastLogConfig) GetPrintToConsole added in v1.2.0

func (c *FastLogConfig) GetPrintToConsole() bool

GetPrintToConsole 获取是否将日志输出到控制台的状态

func (*FastLogConfig) SetChanIntSize added in v1.2.0

func (c *FastLogConfig) SetChanIntSize(size int)

SetChanIntSize 设置通道大小

func (*FastLogConfig) SetConsoleOnly added in v1.2.0

func (c *FastLogConfig) SetConsoleOnly(only bool)

SetConsoleOnly 设置是否仅输出到控制台

func (*FastLogConfig) SetEnableCompress added in v1.2.0

func (c *FastLogConfig) SetEnableCompress(compress bool)

SetEnableCompress 设置是否启用日志文件压缩

func (*FastLogConfig) SetFlushInterval added in v1.2.0

func (c *FastLogConfig) SetFlushInterval(interval time.Duration)

SetFlushInterval 设置刷新间隔

func (*FastLogConfig) SetIsLocalTime added in v1.2.0

func (c *FastLogConfig) SetIsLocalTime(local bool)

SetIsLocalTime 设置是否使用本地时间

func (*FastLogConfig) SetLogDirName added in v1.2.0

func (c *FastLogConfig) SetLogDirName(dirName string)

SetLogDirName 设置日志目录路径

func (*FastLogConfig) SetLogFileName added in v1.2.0

func (c *FastLogConfig) SetLogFileName(fileName string)

SetLogFileName 设置日志文件名

func (*FastLogConfig) SetLogFormat added in v1.2.0

func (c *FastLogConfig) SetLogFormat(format LogFormatType)

SetLogFormat 设置日志格式选项

func (*FastLogConfig) SetLogLevel added in v1.2.0

func (c *FastLogConfig) SetLogLevel(level LogLevel)

SetLogLevel 设置日志级别

func (*FastLogConfig) SetMaxBufferSize added in v1.2.0

func (c *FastLogConfig) SetMaxBufferSize(size int)

SetMaxBufferSize 设置最大缓冲区大小(MB)

func (*FastLogConfig) SetMaxLogAge added in v1.2.0

func (c *FastLogConfig) SetMaxLogAge(age int)

SetMaxLogAge 设置最大日志文件保留天数

func (*FastLogConfig) SetMaxLogBackups added in v1.2.0

func (c *FastLogConfig) SetMaxLogBackups(backups int)

SetMaxLogBackups 设置最大日志文件保留数量

func (*FastLogConfig) SetMaxLogFileSize added in v1.2.0

func (c *FastLogConfig) SetMaxLogFileSize(size int)

SetMaxLogFileSize 设置最大日志文件大小(MB)

func (*FastLogConfig) SetNoBold added in v1.2.0

func (c *FastLogConfig) SetNoBold(noBold bool)

SetNoBold 设置是否禁用终端字体加粗

func (*FastLogConfig) SetNoColor added in v1.2.0

func (c *FastLogConfig) SetNoColor(noColor bool)

SetNoColor 设置是否禁用终端颜色

func (*FastLogConfig) SetPrintToConsole added in v1.2.0

func (c *FastLogConfig) SetPrintToConsole(print bool)

SetPrintToConsole 设置是否将日志输出到控制台

type FastLogConfigurer added in v1.2.0

type FastLogConfigurer interface {
	// SetLogDirName 设置日志目录路径
	SetLogDirName(dirName string)
	// GetLogDirName 获取日志目录路径
	GetLogDirName() string

	// SetLogFileName 设置日志文件名
	SetLogFileName(fileName string)
	// GetLogFileName 获取日志文件名
	GetLogFileName() string

	// SetPrintToConsole 设置是否将日志输出到控制台
	SetPrintToConsole(print bool)
	// GetPrintToConsole 获取是否将日志输出到控制台的状态
	GetPrintToConsole() bool

	// SetConsoleOnly 设置是否仅输出到控制台
	SetConsoleOnly(only bool)
	// GetConsoleOnly 获取是否仅输出到控制台的状态
	GetConsoleOnly() bool

	// SetFlushInterval 设置刷新间隔
	SetFlushInterval(interval time.Duration)
	// GetFlushInterval 获取刷新间隔
	GetFlushInterval() time.Duration

	// SetLogLevel 设置日志级别
	SetLogLevel(level LogLevel)
	// GetLogLevel 获取日志级别
	GetLogLevel() LogLevel

	// SetChanIntSize 设置通道大小
	SetChanIntSize(size int)
	// GetChanIntSize 获取通道大小
	GetChanIntSize() int

	// SetLogFormat 设置日志格式选项
	SetLogFormat(format LogFormatType)
	// GetLogFormat 获取日志格式选项
	GetLogFormat() LogFormatType

	// SetMaxBufferSize 设置最大缓冲区大小(MB)
	SetMaxBufferSize(size int)
	// GetMaxBufferSize 获取最大缓冲区大小(MB)
	GetMaxBufferSize() int

	// SetNoColor 设置是否禁用终端颜色
	SetNoColor(noColor bool)
	// GetNoColor 获取是否禁用终端颜色的状态
	GetNoColor() bool

	// SetNoBold 设置是否禁用终端字体加粗
	SetNoBold(noBold bool)
	// GetNoBold 获取是否禁用终端字体加粗的状态
	GetNoBold() bool

	// SetMaxLogFileSize 设置最大日志文件大小(MB)
	SetMaxLogFileSize(size int)
	// GetMaxLogFileSize 获取最大日志文件大小(MB)
	GetMaxLogFileSize() int

	// SetMaxLogAge 设置最大日志文件保留天数
	SetMaxLogAge(age int)
	// GetMaxLogAge 获取最大日志文件保留天数
	GetMaxLogAge() int

	// SetMaxLogBackups 设置最大日志文件保留数量
	SetMaxLogBackups(backups int)
	// GetMaxLogBackups 获取最大日志文件保留数量
	GetMaxLogBackups() int

	// SetIsLocalTime 设置是否使用本地时间
	SetIsLocalTime(local bool)
	// GetIsLocalTime 获取是否使用本地时间的状态
	GetIsLocalTime() bool

	// SetEnableCompress 设置是否启用日志文件压缩
	SetEnableCompress(compress bool)
	// GetEnableCompress 获取是否启用日志文件压缩的状态
	GetEnableCompress() bool
}

FastLogConfigurer 定义日志配置器接口,包含所有配置项的设置和获取方法

type FastLogInterface added in v1.1.3

type FastLogInterface interface {
	Close() // 关闭日志记录器

	Info(v ...any)    // 记录信息级别的日志,不支持占位符
	Warn(v ...any)    // 记录警告级别的日志,不支持占位符
	Error(v ...any)   // 记录错误级别的日志,不支持占位符
	Success(v ...any) // 记录成功级别的日志,不支持占位符
	Debug(v ...any)   // 记录调试级别的日志,不支持占位符
	Fatal(v ...any)   // 记录致命级别的日志,不支持占位符(调用后程序会退出)

	Infof(format string, v ...any)    // 记录信息级别的日志,支持占位符,格式化
	Warnf(format string, v ...any)    // 记录警告级别的日志,支持占位符,格式化
	Errorf(format string, v ...any)   // 记录错误级别的日志,支持占位符,格式化
	Successf(format string, v ...any) // 记录成功级别的日志,支持占位符,格式化
	Debugf(format string, v ...any)   // 记录调试级别的日志,支持占位符,格式化
	Fatalf(format string, v ...any)   // 记录致命级别的日志,支持占位符,格式化(调用后程序会退出)
}

定义一个接口, 声明对外暴露的方法

type LogFormatType added in v1.1.0

type LogFormatType int

日志格式选项

const (
	Detailed LogFormatType = iota // 详细格式
	Bracket                       // 方括号格式
	Json                          // json格式
	Threaded                      // 协程格式
	Simple                        // 简约格式
	Custom                        // 自定义格式
)

日志格式选项

type LogLevel

type LogLevel int

日志级别枚举

const (
	DEBUG   LogLevel = 10  // 调试级别
	INFO    LogLevel = 20  // 信息级别
	SUCCESS LogLevel = 30  // 成功级别
	WARN    LogLevel = 40  // 警告级别
	ERROR   LogLevel = 50  // 错误级别
	FATAL   LogLevel = 60  // 致命级别
	NONE    LogLevel = 999 // 无日志级别
)

定义日志级别

type PathInfo added in v1.1.5

type PathInfo struct {
	Path    string      // 路径
	Exists  bool        // 是否存在
	IsFile  bool        // 是否为文件
	IsDir   bool        // 是否为目录
	Size    int64       // 文件大小(字节)
	Mode    os.FileMode // 文件权限
	ModTime time.Time   // 文件修改时间
}

PathInfo 是一个结构体,用于封装路径的信息

Jump to

Keyboard shortcuts

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