golang log4go 使用说明及丢失日志原因

本文介绍了一个基于alecthomas的log4go重构的日志包,详细阐述了其特点,包括日志输出到终端、文件及网络,异步输出,json配置,分类输出等。并提供了使用示例及解决日志丢失的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 描述

这个 repository 是从 alecthomas 的 log4go 重构而来的,log4go 是一个类似于用于 Java 编程语言的 log4j 的日志包。源于 Google 的一项 log 工程,官方已经停止维护更新。

仓库地址:

https://github.com/jeanphorn/log4go.git

2. 特点

  • 日志输出到终端
  • 日志输出到文件,支持按大小和时间切片
  • 日志输出到网络
  • 日志异步输出
  • 支持 json 文件配置
  • 日志分类
    • 不同类别的日志,输出到不同的printer中.
  • 兼容老的日志方式

3. 使用示例

  1. 下载源码
go get github.com/jeanphorn/log4go
  1. 导入进工程
import log "github.com/jeanphorn/log4go"
  1. 具体步骤,请查看

https://github.com/jeanphorn/log4go

4. 不用配置文件使用

也可以不适用配置文件,直接在代码中设置好 log 的格式、回滚级别、备份日志个数等,代码示例如下:

package main

import (
	l4g "github.com/jeanphorn/log4go"
)

var (
	Log l4g.Logger = make(l4g.Logger)
)

func InitLog(filename string) {
    _, err := os.Stat("./log/")
	if  os.IsNotExist(err) {
		os.Mkdir("./log/", 0755)
	}
	flw := l4g.NewFileLogWriter("./log/"+filename, false, false)
	flw.SetFormat("[%D %T] [%L] (%S) %M")
	flw.SetRotate(true)
	flw.SetRotateSize(1 * 1024 * 1024) // 10M
	flw.SetRotateMaxBackup(10)         // 备份的日志文件数量
	flw.SetRotateDaily(false)	// 不按天回滚
	flw.SetSanitize(true)
	Log.AddFilter("file", l4g.INFO, flw)
	Log.Info("Log init done")
	time.Sleep(100 * time.Microsecond)
}

func main() {
	InitLog("test.log")
	Log.Info("this is info")
}

但是运行之后,log 文件中没有日志打印,原因是:

log4go 用的是 channel 暂存日志,打印会另起一个 goroutine 进行,但是主 goroutine 退出太快时,负责打印日志的 goroutine 没机会把 channel 中的日志打印出来,导致日志丢失

5. 解决方法

在程序最后加上: time.Sleep(time.Microsecond)sleep() 调用会留给打印日志的 goroutine 执行的时间。

func main() {
	InitLog("test.log")
	Log.Error("this is error")
	time.Sleep(100 * time.Microsecond)
	Log.Info("this is info")
	time.Sleep(100 * time.Microsecond)
}

6. 其它 log 库

  1. https://github.com/hhkbp2/go-logging.git
  2. https://github.com/cihub/seelog

参考:

  1. https://stackoverrun.com/cn/q/3852638
  2. https://www.v2ex.com/amp/t/239039
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wohu007

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值