我使用go logrus,我需要更改输出消息的格式,我尝试了几个没有成功的事情
我需要的是格式化为logrus的格式
[error]: datetime - message
我没有成功的尝试是这样的
logger := &logrus.Logger{
Out: os.Stderr,
Level: level,
Formatter: &logrus.TextFormatter{
DisableColors: true,
TimestampFormat : "2006-01-02 15:04:05",
FullTimestamp:true,
},
}
Run Code Online (Sandbox Code Playgroud)
这产生以下结果
time="2018-02-25 10:42:20" level=error msg="Starting Process"
Run Code Online (Sandbox Code Playgroud)
我希望它成为现实
[INFO]:2018-02-25 10:42:20 - Starting Process
Run Code Online (Sandbox Code Playgroud)
更新 如果zap更好地自定义 https://github.com/uber-go/zap, 它也可以是一个解决方案
tto*_*lak 16
要实现这一点,您需要自己制作TextFormater满足logrus Formatter界面的产品.然后,当您创建自己的格式化程序时,将其传递给logrus struct初始化.另一种方式是你想要达到的目标,这个形成器https://github.com/x-cray/logrus-prefixed-formatter.基于这个形成器,您可以创建自己的.
在你的情况下,你需要使用这样的
logger := &logrus.Logger{
Out: os.Stderr,
Level: logrus.DebugLevel,
Formatter: &prefixed.TextFormatter{
DisableColors: true,
TimestampFormat : "2006-01-02 15:04:05",
FullTimestamp:true,
ForceFormatting: true,
},
}
Run Code Online (Sandbox Code Playgroud)
链接到要点使用logrus-prefixed-formatter更改格式的
副本https://gist.github.com/t-tomalak/146e4269460fc63d6938264bb5aaa1db
如果您最终想要使用它,我会保留此选项,因为在此版本中您具有所需的确切格式,着色以及标准格式化程序中提供的其他功能
第三种选择是使用我创建的包https://github.com/t-tomalak/logrus-easy-formatter.它提供了根据需要格式化输出的简单选项,仅用于此目的.我删除了可能你不会使用的必要选项.
package main
import (
"os"
"github.com/sirupsen/logrus"
"github.com/t-tomalak/logrus-easy-formatter"
)
func main() {
logger := &logrus.Logger{
Out: os.Stderr,
Level: logrus.DebugLevel,
Formatter: &easy.Formatter{
TimestampFormat: "2006-01-02 15:04:05",
LogFormat: "[%lvl%]: %time% - %msg%",
},
}
logger.Printf("Log message")
}
Run Code Online (Sandbox Code Playgroud)
此示例代码将生成:
[INFO]: 2018-02-27 19:16:55 - Log message
Run Code Online (Sandbox Code Playgroud)
另外我想指出,如果将来想要改变格式化器,那么应该没有任何问题可以使用即默认Logrus TextFormatter/JSONFormatter.
如果你真的不想将这个格式化程序复制到你的项目中,你可以使用我的fork logrus-prefixed-formater复制/粘贴这段代码 https://github.com/t-tomalak/logrus-prefixed-formatter
您可以像标准选项一样使用它,但请记住在go go文件中将导入更改为我的存储库
logger := &logrus.Logger{
Out: os.Stderr,
Level: logrus.DebugLevel,
Formatter: &prefixed.TextFormatter{
DisableColors: true,
TimestampFormat : "2006-01-02 15:04:05",
FullTimestamp:true,
ForceFormatting: true,
},
}
Run Code Online (Sandbox Code Playgroud)
我想我对此已经很晚了,但最近我也在努力自定义此日志消息格式,我希望最好以更简单的方式完成此操作。来自 Python,这并不像我想象的那么简单,并且 logrus 文档对此也不是很清楚。
\n\n所以我必须仔细阅读他们的源代码才能真正完成这项工作。这是我的代码。
\n\ntype myFormatter struct {\n log.TextFormatter\n}\n\nfunc (f *myFormatter) Format(entry *log.Entry) ([]byte, error) {\n// this whole mess of dealing with ansi color codes is required if you want the colored output otherwise you will lose colors in the log levels\n var levelColor int\n switch entry.Level {\n case log.DebugLevel, log.TraceLevel:\n levelColor = 31 // gray\n case log.WarnLevel:\n levelColor = 33 // yellow\n case log.ErrorLevel, log.FatalLevel, log.PanicLevel:\n levelColor = 31 // red\n default:\n levelColor = 36 // blue\n }\n return []byte(fmt.Sprintf("[%s] - \\x1b[%dm%s\\x1b[0m - %s\\n", entry.Time.Format(f.TimestampFormat), levelColor, strings.ToUpper(entry.Level.String()), entry.Message)), nil\n}\n\nfunc main() {\n f, _ := os.OpenFile("log.txt", os.O_CREATE|os.O_WRONLY, 0777)\n logger := &log.Logger{\n Out: io.MultiWriter(os.Stderr, f),\n Level: log.InfoLevel,\n Formatter: &myFormatter{log.TextFormatter{\n FullTimestamp: true,\n TimestampFormat: "2006-01-02 15:04:05",\n ForceColors: true,\n DisableLevelTruncation: true,\n },\n },\n }\n logger.Info("Info message")\n logger.Warning("Warning message")\nRun Code Online (Sandbox Code Playgroud)\n\n这是输出
\n\n\xc2\xb1 go run main.go <<<\n[2019-05-13 18:10:34] - INFO - Info message\n[2019-05-13 18:10:34] - WARNING - Warning message\nRun Code Online (Sandbox Code Playgroud)\n\nPS:我对此很陌生,所以如果你们有更好的简洁方法,请分享。
\n| 归档时间: |
|
| 查看次数: |
10346 次 |
| 最近记录: |