logger

package module
v0.0.14 Latest Latest
Warning

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

Go to latest
Published: Dec 17, 2025 License: MIT Imports: 16 Imported by: 28

README

Logger

一个基于 logrus 的 Go 日志库,提供了日志轮转、自动清理、YAML 配置支持和分层路径存储等功能。

主要特性

  • 双重轮转策略:支持基于时间(默认24小时)和基于文件大小的日志轮转
  • 自动日志清理:自动删除超过指定天数的旧日志文件和空目录
  • 分层路径结构:支持按年/月/日(YYYY/MM/DD)的分层存储结构
  • YAML 配置支持:可通过配置文件设置日志参数
  • Windows GUI 兼容:特殊处理 Windows GUI 模式下的日志输出
  • 毫秒级时间戳:日志时间戳包含毫秒精度,便于调试
  • 所有 logrus 日志级别:Trace、Debug、Info、Warn、Error、Fatal、Panic

快速开始

基本使用
import "github.com/WQGroup/logger"

// 设置日志名称
logger.SetLoggerName("MyApp")
logger.Info("应用程序启动")
// 输出:2024-01-01 12:00:00.123 - [INFO]: 应用程序启动
通过 Settings 配置
import "github.com/sirupsen/logrus"

settings := logger.NewSettings()
settings.LogNameBase = "myapp"
settings.Level = logrus.DebugLevel
settings.MaxAgeDays = 30        // 保存30天
settings.MaxSizeMB = 100        // 文件超过100MB时轮转
settings.UseHierarchicalPath = true  // 使用分层路径

logger.SetLoggerSettings(settings)
logger.Debug("这是调试信息")
使用 YAML 配置文件

创建 config.yaml

log_root: "/var/log/myapp"           # 日志根目录
log_name_base: "myapp"               # 日志文件名前缀
level: "info"                        # 日志级别
days_to_keep: 7                      # 保存天数
max_size_mb: 0                       # 文件大小限制(MB),0表示不启用
use_hierarchical_path: true          # 是否使用分层路径

在代码中使用:

err := logger.SetLoggerFromYAML("config.yaml")
if err != nil {
    panic(err)
}

配置选项

Settings 结构体
type Settings struct {
    OnlyMsg             bool          // 是否只输出消息内容,不包含时间戳等
    Level               logrus.Level  // 日志级别(默认 InfoLevel)
    LogRootFPath        string        // 日志根目录(默认当前目录)
    LogNameBase         string        // 日志文件名前缀(默认 "logger")
    RotationTime        time.Duration // 轮转时间间隔(默认24小时)
    MaxAge              time.Duration // 日志最大保存时间(已弃用,使用MaxAgeDays)
    MaxAgeDays          int           // 日志最大保存天数(默认7天)
    MaxSizeMB           int           // 文件大小限制(MB),0表示不启用大小轮转
    UseHierarchicalPath bool          // 是否使用分层路径 YYYY/MM/DD(默认false)
}
日志级别

支持的日志级别(从低到高):

  • trace - 最详细的日志信息
  • debug - 调试信息
  • info - 一般信息(默认)
  • warn / warning - 警告信息
  • error - 错误信息
  • fatal - 致命错误,程序会退出
  • panic - 恐慌错误,程序会 panic

日志存储格式

扁平结构(默认)
./Logs/
├── logger--202401010800--.log
├── logger--202401010900--.log
└── logger--202401011000--.log
分层结构(UseHierarchicalPath=true)
./Logs/
├── 2024/
│   ├── 01/
│   │   ├── 01/
│   │   │   ├── logger--0800--.log
│   │   │   ├── logger--0900--.log
│   │   │   └── logger--1000--.log
│   │   └── 02/
│   │       └── logger--0800--.log
│   └── 02/
│       └── 01/
│           └── logger--0800--.log

轮转策略

时间轮转(默认)
  • 默认每24小时创建一个新的日志文件
  • 文件名格式:logger--YYYYMMDDHHMM--.log
  • 自动删除超过 MaxAgeDays 天数的日志文件
大小轮转

当设置 MaxSizeMB > 0 时:

  • 文件超过指定大小时立即轮转
  • 使用 lumberjack 进行轮转
  • 文件名格式:logger.log
  • 文件名后会自动添加序号,如 logger-2024-01-01.log.1

API 参考

基本日志方法
logger.Debug("调试信息")
logger.Info("一般信息")
logger.Warn("警告信息")
logger.Error("错误信息")
logger.Fatal("致命错误")
logger.Panic("恐慌错误")

// 带格式化
logger.Infof("用户 %s 登录成功", username)
logger.Errorf("连接失败: %v", err)
辅助方法
// 获取当前日志文件路径
path := logger.LogLinkFileFPath()

// 获取当前日志文件名
filename := logger.CurrentFileName()

// 创建默认设置
settings := logger.NewSettings()

// 从 YAML 加载设置
settings, err := logger.LoadSettingsFromYAML("config.yaml")

依赖

许可证

本项目采用 MIT 许可证。

Documentation

Index

Constants

View Source
const (
	NameDef = "logger"
)

Variables

This section is empty.

Functions

func CleanupExpiredLogs added in v0.0.14

func CleanupExpiredLogs(root string, days int) error

func CurrentFileName added in v0.0.6

func CurrentFileName() string

CurrentFileName 当前日志文件名

func Debug

func Debug(args ...interface{})

func Debugf

func Debugf(format string, args ...interface{})

func Debugln

func Debugln(args ...interface{})

func Error

func Error(args ...interface{})

func Errorf

func Errorf(format string, args ...interface{})

func Errorln

func Errorln(args ...interface{})

func Fatal

func Fatal(args ...interface{})

func Fatalf

func Fatalf(format string, args ...interface{})

func Fatalln

func Fatalln(args ...interface{})

func GetLogger added in v0.0.2

func GetLogger() *logrus.Logger

func Info

func Info(args ...interface{})

func Infof

func Infof(format string, args ...interface{})

func Infoln

func Infoln(args ...interface{})

func LogLinkFileFPath added in v0.0.6

func LogLinkFileFPath() string

LogLinkFileFPath returns the path of the current log file.

func NewLogHelper

func NewLogHelper(settings *Settings) *logrus.Logger

func Panic

func Panic(args ...interface{})

func Panicf

func Panicf(format string, args ...interface{})

func Panicln

func Panicln(args ...interface{})

func Print

func Print(args ...interface{})

func Printf

func Printf(format string, args ...interface{})

func Println

func Println(args ...interface{})

func SetLoggerFromYAML added in v0.0.14

func SetLoggerFromYAML(path string) error

func SetLoggerSettings added in v0.0.11

func SetLoggerSettings(inSettings ...*Settings)

func Warn

func Warn(args ...interface{})

func Warnf

func Warnf(format string, args ...interface{})

func Warning

func Warning(args ...interface{})

func Warningf

func Warningf(format string, args ...interface{})

func Warningln

func Warningln(args ...interface{})

func Warnln

func Warnln(args ...interface{})

Types

type Settings added in v0.0.11

type Settings struct {
	OnlyMsg             bool          // 是否只输出消息内容
	Level               logrus.Level  // 日志级别
	LogRootFPath        string        // 日志根目录
	LogNameBase         string        // 日志名称
	RotationTime        time.Duration // 日志轮转时间
	MaxAge              time.Duration // 日志最大保存时间
	MaxAgeDays          int
	MaxSizeMB           int
	UseHierarchicalPath bool // 是否使用分层路径(YYYY/MM/DD)
}

func LoadSettingsFromYAML added in v0.0.14

func LoadSettingsFromYAML(path string) (*Settings, error)

func NewSettings added in v0.0.11

func NewSettings() *Settings

NewSettings 创建一个新的日志设置

type YamlConfig added in v0.0.14

type YamlConfig struct {
	LogRoot             string `yaml:"log_root"`
	LogNameBase         string `yaml:"log_name_base"`
	Level               string `yaml:"level"`
	DaysToKeep          int    `yaml:"days_to_keep"`
	MaxSizeMB           int    `yaml:"max_size_mb"`
	UseHierarchicalPath bool   `yaml:"use_hierarchical_path"`
}

Jump to

Keyboard shortcuts

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