Go语言日志时间戳实现:标准库log通过SetPrefix添加时间戳前缀、SetFlags设置日期时间格式,轻量简便;logrus通过TextFormatter的TimestampFormat自定义格式、FullTimestamp开启完整时间戳,易用灵活;zap通过EncoderConfig的EncodeTime指定ISO8601等编码函数,高性能。三者分别
在Go语言中,日志记录可以通过标准库或第三方库来实现。无论选择哪种方式,为日志添加时间戳都是一项基本需求——因为开发者需要了解事件发生的具体时间。下面详细介绍标准库log、logrus和zap三种日志库中设置时间戳的具体方法,并提供可直接使用的代码示例。

长期稳定更新的攒劲资源: >>>点此立即查看<<<
标准库的log包从设计之初就包含了时间戳功能,但默认格式可能无法满足所有需求。通过log.SetPrefix()和log.SetFlags(),可以灵活定制输出样式。例如,将time.Now().Format()的返回值作为前缀,并结合标志位,即可输出包含日期和时间的日志信息。
package main
import (
"log"
"os"
"time"
)
func main() {
// 设置日志前缀为时间戳
log.SetPrefix(time.Now().Format("2006-01-02 15:04:05") + " ")
// 设置日志标志,包括日期和时间
log.SetFlags(log.Ldate | log.Ltime)
log.Println("这是一条带有时间戳的日志")
}
运行上述代码后,日志输出中将包含类似2025-07-08 14:30:25的时间戳。需要注意的是,SetPrefix仅在程序启动时执行一次,因此后续每条日志都会沿用初始化时设置的前缀——如果程序运行时间较长,前缀中的时间将保持初始值。但通过log.SetFlags中的Ldate|Ltime,每条日志末尾仍会显示实际时间,这是一种简单实用的折中方案。
logrus是社区中广泛使用的日志库,功能比标准库更为丰富。要添加时间戳,首先安装该包:
go get github.com/sirupsen/logrus
然后创建Logger实例,在配置TextFormatter时指定TimestampFormat并设置FullTimestamp: true,时间戳便会自动附加:
package main
import (
"github.com/sirupsen/logrus"
)
func main() {
// 创建一个新的logrus实例
logger := logrus.New()
// 设置日志格式为文本格式,并包含时间戳
logger.SetFormatter(&logrus.TextFormatter{
TimestampFormat: "2006-01-02 15:04:05",
FullTimestamp: true,
})
logger.Info("这是一条带有时间戳的日志")
}
这里TimestampFormat采用Go的标准参考时间格式“2006-01-02 15:04:05”,也可以根据需求改为“2006/01/02 15:04”等其他格式。若不显式设置FullTimestamp为true,默认可能只显示相对时间或完全不显示时间,因此建议明确开启。
zap是Uber开发的高性能日志库,以零反射和低内存分配著称。它通过EncoderConfig中的EncodeTime字段实现时间戳格式的自定义。以下是具体代码:
package main
import (
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
func main() {
// 设置日志编码器和时间戳格式
encoderConfig := zapcore.EncoderConfig{
TimeKey: "time",
LevelKey: "level",
NameKey: "logger",
CallerKey: "caller",
MessageKey: "msg",
StacktraceKey: "stacktrace",
LineEnding: zapcore.DefaultLineEnding,
EncodeLevel: zapcore.LowercaseLevelEncoder,
EncodeTime: zapcore.ISO8601TimeEncoder,
EncodeDuration: zapcore.SecondsDurationEncoder,
EncodeCaller: zapcore.ShortCallerEncoder,
}
// 创建一个新的zap.Logger实例
logger, _ := zap.NewProductionEncoder(encoderConfig).Build()
defer logger.Sync()
logger.Info("这是一条带有时间戳的日志")
}
其中EncodeTime: zapcore.ISO8601TimeEncoder会输出ISO 8601格式的时间戳,例如2025-07-08T14:30:25.123+0800。若希望使用自定义格式,比如“2006-01-02 15:04:05”,可以替换为zapcore.TimeEncoderOfLayout("2006-01-02 15:04:05")。虽然zap的配置项相对较多,但它提供的高性能和灵活性值得投入时间进行调优。
三种方案各有特点:标准库log轻量但功能有限;logrus易于使用且社区资源丰富;zap性能出色但配置稍显复杂。根据项目规模和时延需求选择合适的库即可。无论采用哪一种,时间戳功能都已预留好接口,按照上述示例编写代码即可实现。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述