golang轻量级多级别日志记录与轮转文件输出插件库mlog的使用

golang轻量级多级别日志记录与轮转文件输出插件库mlog的使用

简介

mlog是一个简单的Go语言日志模块,具有文件轮转功能和控制台日志输出功能。

安装

go get github.com/jbrodriguez/mlog

使用示例

示例1:输出到控制台和轮转日志文件

package main

import "github.com/jbrodriguez/mlog"

func main() {
    // 初始化日志,设置日志级别为Info,输出到app.log文件
    mlog.Start(mlog.LevelInfo, "app.log")

    // 记录Info级别日志
    mlog.Info("Hello World !")

    // 记录Warning级别日志
    ipsum := "ipsum"
    mlog.Warning("Lorem %s", ipsum)
}

示例2:仅输出到控制台

package main

import "github.com/jbrodriguez/mlog"

func main() {
    // 空文件名表示只输出到控制台
    mlog.Start(mlog.LevelInfo, "")

    mlog.Info("Hello World !")

    ipsum := "ipsum"
    mlog.Warning("Lorem %s", ipsum)
}

示例3:自定义日志轮转配置

默认情况下,当日志文件达到10MB时会进行轮转,最多保留10个备份文件。可以使用StartEx函数自定义这些参数:

package main

import "github.com/jbrodriguez/mlog"

func main() {
    // 设置日志级别为Info,输出到app.log文件
    // 当日志文件达到5MB时轮转,最多保留5个备份文件
    mlog.StartEx(mlog.LevelInfo, "app.log", 5*1024*1024, 5)

    mlog.Info("Hello World !")

    ipsum := "ipsum"
    mlog.Warning("Lorem %s", ipsum)
}

设置日志标志

可以自定义日志输出的格式标志:

mlog.DefaultFlags = log.Ldate|log.Ltime|log.Lmicroseconds|log.Lshortfile

输出示例

日志输出格式如下:

I: 2015/05/15 07:09:45 main.go:10: Hello World !
W: 2015/05/15 07:09:45 main.go:13: Lorem ipsum

其中:

  • “I:” 表示Info级别日志
  • “W:” 表示Warning级别日志
  • 后面跟着时间戳、文件名和行号,最后是日志消息

更多关于golang轻量级多级别日志记录与轮转文件输出插件库mlog的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang轻量级多级别日志记录与轮转文件输出插件库mlog的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


mlog - Golang轻量级多级别日志记录与轮转文件输出库

mlog是一个轻量级的Golang日志库,支持多级别日志记录和文件轮转功能。下面我将详细介绍如何使用mlog。

安装

go get github.com/hnakamur/mlog

基本使用

package main

import (
	"github.com/hnakamur/mlog"
)

func main() {
	// 初始化日志记录器
	logger := mlog.NewLogger()

	// 设置日志级别
	logger.SetLevel(mlog.Ldebug)

	// 输出日志
	logger.Debug("This is a debug message")
	logger.Info("This is an info message")
	logger.Warn("This is a warning message")
	logger.Error("This is an error message")
}

多级别日志

mlog支持以下日志级别:

  • Ldebug - 调试信息
  • Linfo - 常规信息
  • Lwarn - 警告信息
  • Lerror - 错误信息

文件输出与轮转

mlog支持将日志输出到文件并自动轮转:

package main

import (
	"github.com/hnakamur/mlog"
)

func main() {
	// 创建文件输出器
	fileOutput := mlog.NewFileOutput("/var/log/myapp.log", 10*1024*1024, 5)
	
	// 创建日志记录器并添加文件输出
	logger := mlog.NewLogger()
	logger.AddOutput(fileOutput)
	
	// 设置日志级别
	logger.SetLevel(mlog.Linfo)
	
	// 输出日志
	for i := 0; i < 100; i++ {
		logger.Info("Log message %d", i)
	}
}

NewFileOutput参数说明:

  1. 日志文件路径
  2. 单个日志文件最大大小(字节)
  3. 保留的旧日志文件数量

当日志文件达到指定大小时,会自动进行轮转,旧文件会被重命名(如myapp.log.1),并创建新的日志文件。

自定义输出格式

package main

import (
	"github.com/hnakamur/mlog"
	"time"
)

func main() {
	logger := mlog.NewLogger()
	
	// 自定义格式化函数
	logger.SetFormatter(func(level mlog.LogLevel, format string, v ...interface{}) string {
		timestamp := time.Now().Format("2006-01-02 15:04:05")
		return fmt.Sprintf("[%s] [%s] %s\n", timestamp, level.String(), fmt.Sprintf(format, v...))
	})
	
	logger.Info("Custom formatted log message")
}

多输出目标

可以同时输出到多个目标,比如文件和标准输出:

package main

import (
	"github.com/hnakamur/mlog"
	"os"
)

func main() {
	logger := mlog.NewLogger()
	
	// 文件输出
	fileOutput := mlog.NewFileOutput("/var/log/myapp.log", 10*1024*1024, 5)
	logger.AddOutput(fileOutput)
	
	// 标准输出
	stdoutOutput := mlog.NewWriterOutput(os.Stdout)
	logger.AddOutput(stdoutOutput)
	
	logger.Info("This will go to both file and stdout")
}

高级配置示例

package main

import (
	"github.com/hnakamur/mlog"
	"os"
)

func main() {
	// 创建日志记录器
	logger := mlog.NewLogger()
	
	// 设置全局日志级别
	logger.SetLevel(mlog.Linfo)
	
	// 添加文件输出(10MB大小限制,保留5个备份)
	fileOutput := mlog.NewFileOutput("app.log", 10*1024*1024, 5)
	logger.AddOutput(fileOutput)
	
	// 添加标准错误输出
	stderrOutput := mlog.NewWriterOutput(os.Stderr)
	logger.AddOutput(stderrOutput)
	
	// 设置不同输出目标的日志级别
	fileOutput.SetLevel(mlog.Ldebug)  // 文件记录所有级别
	stderrOutput.SetLevel(mlog.Lwarn) // 控制台只记录警告及以上
	
	// 使用日志
	logger.Debug("Debug message (only in file)")
	logger.Info("Info message (only in file)")
	logger.Warn("Warning message (both file and stderr)")
	logger.Error("Error message (both file and stderr)")
}

性能考虑

mlog在设计时考虑了性能因素:

  1. 使用缓冲IO减少磁盘操作
  2. 日志级别检查在前,避免不必要的格式化
  3. 简单的轮转机制减少开销

总结

mlog是一个轻量但功能完备的Golang日志库,特别适合需要文件轮转和多级别日志记录的场景。它的API设计简洁,易于集成到现有项目中,同时提供了足够的灵活性来满足大多数日志需求。

对于更复杂的需求,可以考虑结合使用mlog和其他日志库,或者根据需要扩展mlog的功能。

回到顶部