go - 如何更改 logrus 中的日志输出格式?

标签 go logging

我使用 Go logrus,我需要更改输出消息的格式。我尝试了几件事都没有成功。

我需要的是使用 logrus 格式化程序这样的格式

[错误]:日期时间 - 消息

我试过没有成功的是这个

     logger := &logrus.Logger{
            Out:   os.Stderr,
            Level: level,
            Formatter: &logrus.TextFormatter{
                DisableColors: true,
                TimestampFormat : "2006-01-02 15:04:05",
                FullTimestamp:true,
    
            },
        }

这会产生以下内容

    time="2018-02-25 10:42:20" level=error msg="Starting Process"

我希望它是

    [INFO]:2018-02-25 10:42:20 - Starting Process

最佳答案

标准 logrus-prefixed-formater 用法

要实现这一点,您需要制作自己的 TextFormater 以满足 logrus Formatter 接口(interface)。然后,当您创建自己的格式化程序时,您将其传递给 logrus 结构初始化。其他接近和接近你想要实现的方法是这个格式器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,
        },
    }

logrus-prefixed-formater 的自定义输出

链接到 gist 以使用具有更改格式的 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")
}

此示例代码将产生:

[INFO]: 2018-02-27 19:16:55 - Log message

我还想指出,如果将来想更改格式化程序,使用默认 Logrus 应该没有任何问题 TextFormatter/JSONFormatter


logrus-prefixed-formater 的自定义输出

如果您真的不想将此格式化程序复制到您的项目中,您可以使用我的 fork logrus-prefixed-formater 复制/粘贴此代码 https://github.com/t-tomalak/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,
        },
    }

关于go - 如何更改 logrus 中的日志输出格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48971780/

相关文章:

string - 如何在 GO 中操作字符串来反转它们?

go - 如何计算可运行状态下goroutine的数量

python-3.x - python 3.6 *记录模块错误* UnicodeEncodeError : 'charmap' codec can't encode characters

c - syslog.conf 配置仅登录到自定义日志文件,

go - 如何在golang中获取随机数样本?

apache - 在 Golang net/http 中设置服务器软件变量

go - 静态链接 stdlib.so

java - 记录时 OverlappingFileLockException

java - EDITLogBack Syslog 不工作 java

java - 你觉得 java.util.logging 足够了吗?