既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
结构体定义
type logFormatter struct{}
这里定义了一个空的结构体logFormatter
,目的是为了实现logrus
的Formatter
接口。在Go语言中,接口实现是隐式的,我们通过实现接口中的所有方法,来实现该接口,而不需要在结构体定义时显式声明。
Format方法
func (s \*logFormatter) Format(entry \*logrus.Entry) ([]byte, error) {
timestamp := time.Now().Local().Format("2006-01-02 15:04:05")
var msg string
if entry.HasCaller() {
msg = fmt.Sprintf("%s %s [%s] [%d] - %s\n", timestamp, strings.ToUpper(entry.Level.String()), entry.Caller.Function, entry.Caller.Line, entry.Message)
} else {
msg = fmt.Sprintf("%s [%s] - %s\n", timestamp, strings.ToUpper(entry.Level.String()), entry.Message)
}
return []byte(msg), nil
}
Format
方法接收一个*logrus.Entry
类型的参数entry
,它包含了当前日志条目的所有信息。方法首先获取当前时间作为日志的时间戳,然后根据是否能获取到调用者信息(entry.HasCaller()
),使用fmt.Sprintf
格式化日志信息。格式化字符串包括时间戳、日志级别、调用者信息(函数名和代码行数)以及日志消息。最后,方法返回格式化后的日志信息的字节切片和一个nil
错误。
设计意义与必要性
通过自定义logFormatter
,我们能够控制日志的输出格式,使其更适合我们的日志记录和分析需求。例如,在调试阶段,详细的调用者信息(函数名和代码行数)对于定位问题非常有用。而在生产环境,可能更关注日志的时间戳和级别。此外,统一的日志格式有助于使用日志管理工具进行集中式日志管理和分析。
结论
自定义日志格式化是提高软件开发和维护效率的有效手段。通过上述logFormatter
的设计与实现,我们不仅学习了如何在Go语言中使用logrus
库进行日志格式化,还理解了自定义日志格式
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新