
本文介绍如何通过自定义 Logrus 的 TextFormatter,禁用默认的时间戳和日志级别字段,从而输出纯净的 CSV 格式日志内容。
本文介绍如何通过自定义 Logrus 的 TextFormatter,禁用默认的时间戳和日志级别字段,从而输出纯净的 CSV 格式日志内容。
Logrus 默认以结构化文本格式输出日志,包含 time=、level=、msg= 等键值对(如 time="2015-11-18T01:27:38-04:00" level=info msg="100,Click,Android"),这会破坏 CSV 文件的字段对齐与解析。若目标是生成纯 CSV 日志(例如:100,Click,Android),需彻底移除非业务字段。
关键在于配置 logrus.TextFormatter——Logrus 默认使用的文本格式器。你需要禁用时间戳、日志级别、调用函数信息等冗余字段,并将日志消息(msg)作为唯一输出内容:
package main
import (
"github.com/sirupsen/logrus"
)
func main() {
logger := logrus.New()
// 获取并配置 TextFormatter
formatter := &logrus.TextFormatter{
DisableTimestamp: true, // 隐藏 time=...
DisableLevel: true, // 隐藏 level=...
DisableCaller: true, // 可选:隐藏文件/行号
DisableColors: true, // 避免 ANSI 转义符干扰 CSV
FullTimestamp: false,
FieldMap: logrus.FieldMap{
logrus.FieldKeyMsg: "", // 关键:清空 msg 的前缀(如 "msg=")
},
}
logger.SetFormatter(formatter)
// 输出纯消息内容(无前缀、无结构)
logger.Info("100,Click,Android")
// → 输出:100,Click,Android(不含任何额外字段)
}⚠️ 注意事项:
- DisableLevel: true 仅在 TextFormatter 下生效(Logrus v1.9+ 支持;旧版本需配合 FieldMap 清除 level 键);
- FieldMap 中设置 logrus.FieldKeyMsg: "" 可移除 "msg=" 前缀,确保输出仅为原始字符串;
- 若写入文件,请使用 logger.SetOutput(os.Stdout) 或重定向到 *os.File,避免控制台颜色干扰;
- 对于严格 CSV 场景(含逗号、换行、引号),建议不依赖日志库直接写 CSV,而改用 encoding/csv 包写入,Logrus 更适合结构化/调试日志。
总结:Logrus 完全可满足纯净 CSV 日志需求,只需正确配置 TextFormatter 并关闭无关字段。无需引入新日志库——专注定制,即可兼顾灵活性与简洁性。