25

I'm trying to transition from the Golang log package to Logrus. My issue is around how to customize the timestamp format of logged messages. The default is a counter of seconds since start but I want a "2016-03-24 17:10:15" format. My simple test code is:

package main

import (
        "github.com/Sirupsen/logrus"
)

func main() {
        customFormatter := new(logrus.TextFormatter)
        customFormatter.TimestampFormat = "2006-01-02 15:04:05"
        logrus.SetFormatter(customFormatter)
        logrus.Info("Hello Walrus")
}

This compiles and runs fine but the timestamp format is unchanged. Can anyone offer some insight into why it isn't working?

Thanks

Community
  • 1
  • 1
Steve Crook
  • 1,013
  • 2
  • 13
  • 22

1 Answers1

41

I believe you want to set the following field to true to enable the timestamp when running it yourself with a TTY attached.

From the logrus.TextFormatter documentation:

// Enable logging the full timestamp when a TTY is attached instead of just
// the time passed since beginning of execution.
FullTimestamp bool

Tweaking your provided example:

package main

import (
    "github.com/Sirupsen/logrus"
)

func main() {
    customFormatter := new(logrus.TextFormatter)
    customFormatter.TimestampFormat = "2006-01-02 15:04:05"
    logrus.SetFormatter(customFormatter)
    logrus.Info("Hello Walrus before FullTimestamp=true")
    customFormatter.FullTimestamp = true
    logrus.Info("Hello Walrus after FullTimestamp=true")
}

Produces:

$ go run main.go
INFO[0000] Hello Walrus before FullTimestamp=true
INFO[2016-03-24 20:18:56] Hello Walrus after FullTimestamp=true
Elad Tabak
  • 2,317
  • 4
  • 23
  • 33
Brian
  • 1,663
  • 1
  • 14
  • 11
  • 3
    Why is that particular date used? Any other date in the same format results in strange results. The same date with 2007 gives me 3007 as the current year. – Bren May 03 '18 at 14:56
  • 5
    Golang's time formatting insanity is to use so called "reference date" as a template so instead of "YYYY-MM-DD" one have to use "2006-01-02" literally. See also https://stackoverflow.com/questions/20234104 – Onlyjob Sep 13 '18 at 01:05
  • 12
    As a one-liner: `logrus.SetFormatter(&logrus.TextFormatter{TimestampFormat: "2006-01-02 15:04:05", FullTimestamp: true})` – Eric Lindsey Aug 16 '19 at 00:09
  • 1
    I want milisecond too, how can I do that ? – insanely_sin Jul 27 '22 at 17:59
  • @insanely_sin `"2006-01-02 15:04:05.000"` – bodqhrohro Nov 25 '22 at 06:15