Правильная реализация логирования в пакете Golang - PullRequest
3 голосов
/ 09 июля 2020

У меня есть небольшой Golang пакет , который выполняет некоторую работу. Эта работа предполагает большое количество ошибок, и это нормально. В настоящее время все ошибки игнорируются. Да, это может показаться странным, но перейдите по ссылке и проверьте основное назначение пакета. Я хотел бы расширить функциональность пакета и предоставить возможность видеть ошибки, возникающие во время выполнения. Но из-за отсутствия навыков разработки программного обеспечения у меня есть вопросы, на которые нет ответов.

Сначала я подумал реализовать ведение журнала внутри пакета, используя существующее ведение журнала (zerolog, zap или что-то еще). Но будет ли это нормально для пользователей пакета? Потому что они могут захотеть использовать другие пакеты журналирования и захотят изменить выходной формат. Может быть, можно предоставить пользователю способ ввести собственное ведение журнала?

Я бы хотел добиться возможности предоставления легко настраиваемого способа ведения журнала, который можно было бы включать или выключать по требованию пользователя.

1 Ответ

2 голосов
/ 09 июля 2020

Некоторые go библиотеки используют такое ведение журнала

в вашем пакете, определите интерфейс регистратора

type Yourlogging interface{
      Errorf(...)
      Warningf(...)
      Infof(...)
      Debugf(...)
}

и определите переменную для этого интерфейса

  var mylogger Yourlogging
  func SetLogger(l yourlogging)error{
       mylogger = l
  }

в свое удовольствие c, вы можете вызвать их для регистрации

  mylogger.Infof(..)

  mylogger.Errorf(...)

вам не нужно реализовывать интерфейс, но вы можете использовать их, которые реализуют этот интерфейс

 for example:
     SetLogger(os.Stdout)    //logging output to stdout
     SetLogger(logrus.New()) // logging output to logrus  (github.com/sirupsen/logrus)
  
...