cpp

Протоколирование

Для протоколирования можно воспользоваться функциями и методами из пакета log. Пакет log содержит следующие функции:

  • Print() — аналог функции Print(). Формат функции:
log.Print(v ...interface{})

Пример:

// import "log"
log.Print("Сообщение", 10, true)
// 2022/04/19 21:23:57 Сообщение10 true
  • Println() — аналог функции Println(). Формат функции:
log.Println(v ...interface{})

Пример:

log.Println("Сообщение", 10, true)
// 2022/04/19 21:25:33 Сообщение 10 true
  • Printf() — аналог функции Printf(). Формат функции:
log.Printf(format string, v ...interface{})

Пример:

log.Printf("%s %d %v", "Сообщение", 10, true)
// 2022/04/19 21:27:27 Сообщение 10 true
  • Fatal() — вызывает функцию Print(), а затем функцию os.Exit(1). Формат функции:
log.Fatal(v ...interface{})

Пример:

log.Fatal("Сообщение", 10, true)
// 2022/04/19 19:58:14 Сообщение10 true
// exit status 1
  • Fatalln() — вызывает функцию Println(), а затем функцию os.Exit(1). Формат функции:
log.Fatalln(v ...interface{})

Пример:

log.Fatalln("Сообщение", 10, true)
// 2022/04/19 19:59:17 Сообщение 10 true
// exit status 1
  • Fatalf() — вызывает функцию Printf(), а затем функцию os.Exit(1). Формат функции:
log.Fatalf(format string, v ...interface{})

Пример:

log.Fatalf("%s %d %v", "Сообщение", 10, true)
// 2022/04/19 20:01:55 Сообщение 10 true
// exit status 1
  • Panic() — вызывает функцию Print(), а затем функцию panic(). Формат функции:
log.Panic(v ...interface{})

Пример:

log.Panic("Сообщение", 10, true)
// 2022/04/19 20:32:51 Сообщение10 true
// panic: Сообщение10 true
  • Panicln() — вызывает функцию Println(), а затем функцию panic(). Формат функции:
log.Panicln(v ...interface{})

Пример:

log.Panicln("Сообщение", 10, true)
// 2022/04/19 20:35:09 Сообщение 10 true
// panic: Сообщение 10 true
  • Panicf() — вызывает функцию Printf(), а затем функцию panic(). Формат функции:
log.Panicf(format string, v ...interface{})

Пример:

log.Panicf("%s %d %v", "Сообщение", 10, true)
// 2022/04/19 20:37:04 Сообщение 10 true
// panic: Сообщение 10 true
  • SetPrefix() — задает префикс, выводимый перед сообщением. Формат функции:
log.SetPrefix(prefix string)

Пример:

log.SetPrefix("+++ ")
fmt.Println(log.Prefix()) // +++
log.Println("Сообщение")
// +++ 2022/04/19 21:32:26 Сообщение
  • Prefix() — возвращает префикс, выводимый перед сообщением. Формат функции:
log.Prefix() string
  • SetFlags() — задает флаги, задающие элементы отображаемые перед сообщением. Формат функции:
log.SetFlags(flag int)

В качестве параметра можно указать комбинацию следующих констант через оператор |:

  • log.Ldate — отображать дату (2022/04/19);
  • log.Ltime — выводить время (21:35:58);
  • log.LstdFlags — комбинация log.Ldate | log.Ltime (значение по умолчанию);
  • log.LUTC — использовать часовой пояс UTC, а не местный часовой пояс;
  • log.Lmicroseconds — отображать миллисекунды (21:57:09.091939);
  • log.Lshortfile — выводить название файла и номер строки (main.go:11);
  • log.Llongfile — выводить путь, название файла и номер строки (C:/book/test/main.go:11);
  • log.Lmsgprefix — отображать префикс перед сообщением, а не в начале строки.

Пример:

log.SetPrefix("+++ ")
log.SetFlags(log.LstdFlags | log.Lshortfile | log.Lmsgprefix)
log.Println("Сообщение")
// 2022/04/19 22:02:56 main.go:12: +++ Сообщение
  • Flags() — возвращает флаги. Формат функции:
log.Flags() int
  • Writer() — возвращает поток вывода. Формат функции:
log.Writer() io.Writer
  • SetOutput() — позволяет задать поток вывода. Формат функции:
log.SetOutput(w io.Writer)

Перенаправим вывод в файл вместо вывода на консоль:

func test() {
   mode := os.O_WRONLY | os.O_CREATE | os.O_APPEND
   file, err := os.OpenFile(`C:\book\test.txt`, mode, 0o777)
   if err != nil {
      fmt.Println(err)
      return
   }
   defer file.Close()
   log.SetOutput(file)
   log.Println("Сообщение")
}

Вместо использования стандартного объекта протоколирования можно создать отдельный объект структуры Logger с помощью следующих функций:

log.Default() *log.Logger
log.New(out io.Writer, prefix string, flag int) *log.Logger

Функция Default() возвращает указатель на стандартный объект протоколирования:

logger := log.Default()
logger.Println("Сообщение")

В первом параметре функции New() указывается поток вывода, во втором — префикс, а в третьем — флаги, задающие элементы отображаемые перед сообщением. Пример:

logger := log.New(os.Stdout, "+++ ", log.LstdFlags)
logger.Println("Сообщение")
// +++ 2022/04/19 22:39:38 Сообщение

Методы структуры Logger:

(*log.Logger).Print(v ...interface{})
(*log.Logger).Println(v ...interface{})
(*log.Logger).Printf(format string, v ...interface{})
(*log.Logger).Fatal(v ...interface{})
(*log.Logger).Fatalln(v ...interface{})
(*log.Logger).Fatalf(format string, v ...interface{})
(*log.Logger).Panic(v ...interface{})
(*log.Logger).Panicln(v ...interface{})
(*log.Logger).Panicf(format string, v ...interface{})
(*log.Logger).SetPrefix(prefix string)
(*log.Logger).Prefix() string
(*log.Logger).SetFlags(flag int)
(*log.Logger).Flags() int
(*log.Logger).Writer() io.Writer
(*log.Logger).SetOutput(w io.Writer)

Все эти методы аналогичны одноименным функциям, которые мы уже рассмотрели ранее. Перенаправим вывод в файл:

func test() {
   mode := os.O_WRONLY | os.O_CREATE | os.O_APPEND
   file, err := os.OpenFile(`C:\book\test.txt`, mode, 0o777)
   if err != nil {
      fmt.Println(err)
      return
   }
   defer file.Close()
   logger := log.New(file, "+++ ", log.LstdFlags)
   logger.Println("Сообщение")
}

Учебник Go (Golang)
Учебник Go (Golang) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

cpp