Есть ли способ отформатировать логи (как описано ниже) с помощью библиотеки golang std? - PullRequest
0 голосов
/ 18 сентября 2018
  1. 1 февраля 2018 года в 15:04:05 (UTC) | Это лог сообщение

  2. 2018-02-01T15: 04: 05Z | Это лог сообщение

Я нашел следующие форматы в go src: https://github.com/golang/go/blob/master/src/log/log.go#L37 Но, похоже, мне не удалось сделать это, используя только эти ..

Ответы [ 3 ]

0 голосов
/ 18 сентября 2018

Вы можете использовать log.SetOutput(...) с модулем записи аргументов, который печатает записи, используя нужный формат (например, встроенный RFC3999 или любой другой по вашему выбору), например:

const timeFormat = time.RFC3339

type logWriter struct{}

func (lw *logWriter) Write(bs []byte) (int, error) {
  return fmt.Print(time.Now().UTC().Format(timeFormat), " | ", string(bs))
}

func main() {
  log.SetFlags(0)               // Omit default prefixes.
  log.SetOutput(new(logWriter)) // Use our custom writer.

  log.Printf("Hello, %s!", "World")
  // 2018-09-18T14:50:40Z | Hello, World!
}

Вы можете изменить метку времени, используя другой формат, например:

const timeFormat = "Jan 2, 2006 at 3:04:05pm (UTC)"

// ...
  log.Printf("Hello, %s!", "World")
  // Sep 18, 2018 at 2:52:26pm (UTC) | Hello, World!
0 голосов
/ 19 сентября 2018

https://play.golang.org/p/hPCn3MflkgQ Вот ответ.Вам следует разобраться с интерфейсом Writer и создать новый журнал, используя его

0 голосов
/ 18 сентября 2018

Здесь есть две опции:

. Используйте log.SetOutput для установки пользовательского модуля записи.

Или используйте вместо этого пакет fmt, чтобы просто печатать на стандартный вывод или в другое место - пакет журнала stdlib мало что дает, и довольно просто создать свой собственный пакет журнала, который выводит с пользовательским форматом (форматами) времени на стандартный вывод(или файл журнала).Например, вот такой пакет в несколько строк:

package log

import (
    "fmt"
    "time"
)

var TimeFormat = "2006-02-01T15:04:05Z"

func Printf(format string, args ...interface{}) {
    format = fmt.Sprintf("%s %s", time.Now().Format(TimeFormat), format)
    fmt.Printf(format, args...)
}

Я бы порекомендовал сделать это самостоятельно, если у вас есть конкретные потребности, и просто вывести на стандартный вывод с помощью fmt.Printf.Вам действительно не нужен сторонний пакет журналов.

https://play.golang.org/p/iPeuGjQqEf4

...