Функция log.New
Функция log.New создает новый логгер, который записывает
сообщения в указанный выходной поток. Первым параметром
функция принимает интерфейс io.Writer, куда будут
записываться логи, вторым параметром - строку с префиксом,
который добавляется в начало каждого сообщения, третьим
параметром - флаги, определяющие форматирование сообщений.
Синтаксис
log.New(w io.Writer, prefix string, flag int) *log.Logger
Пример
Давайте создадим логгер, который записывает сообщения в стандартный вывод с префиксом "INFO: " и флагом, добавляющим время и дату:
package main
import (
"log"
"os"
)
func main() {
logger := log.New(os.Stdout, "INFO: ", log.Ldate|log.Ltime)
logger.Println("Application started")
logger.Println("Processing data")
}
Результат выполнения кода:
"INFO: 2026/09/04 15:30:45 Application started"
"INFO: 2026/09/04 15:30:45 Processing data"
Пример
Давайте создадим логгер для записи ошибок в файл с префиксом "ERROR: " и флагом, добавляющим время, дату и имя файла с номером строки:
package main
import (
"log"
"os"
)
func main() {
file, err := os.Create("app.log")
if err != nil {
log.Fatal(err)
}
defer file.Close()
logger := log.New(file, "ERROR: ", log.Ldate|log.Ltime|log.Lshortfile)
logger.Println("Database connection failed")
logger.Println("Invalid user input")
}
Содержимое файла после выполнения кода:
"ERROR: 2026/09/04 15:30:45 main.go:12: Database connection failed"
"ERROR: 2026/09/04 15:30:45 main.go:13: Invalid user input"
Пример
Давайте создадим несколько логгеров с разными уровнями логирования, пишущих в один выходной поток:
package main
import (
"log"
"os"
)
func main() {
infoLogger := log.New(os.Stdout, "INFO: ", log.Ldate|log.Ltime)
errorLogger := log.New(os.Stdout, "ERROR: ", log.Ldate|log.Ltime)
infoLogger.Println("User logged in")
errorLogger.Println("Failed to save file")
infoLogger.Println("User logged out")
}
Результат выполнения кода:
"INFO: 2026/09/04 15:30:45 User logged in"
"ERROR: 2026/09/04 15:30:45 Failed to save file"
"INFO: 2026/09/04 15:30:45 User logged out"
Пример
Давайте создадим логгер без префикса и флагов, который просто записывает сырые сообщения:
package main
import (
"log"
"os"
)
func main() {
logger := log.New(os.Stdout, "", 0)
logger.Print("Raw message 1")
logger.Print("Raw message 2")
}
Результат выполнения кода:
"Raw message 1"
"Raw message 2"
Смотрите также
-
функцию
log.SetFlags,
которая устанавливает флаги форматирования для стандартного логгера -
функцию
log.SetPrefix,
которая устанавливает префикс для стандартного логгера -
функцию
log.SetOutput,
которая изменяет выходной поток для стандартного логгера -
тип
log.Logger,
который представляет собой экземпляр логгера