Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Протоколирование
Для протоколирования можно воспользоваться функциями и методами из пакета 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("Сообщение")
}
Помощь сайту
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов