Функция log.SetOutput
Функция log.SetOutput предназначена для изменения
места записи логов пакета log.
По умолчанию логи выводятся в стандартный поток ошибок
(os.Stderr). С помощью этой функции можно
перенаправить вывод в файл, сетевой сокет, буфер
или любой другой объект, который реализует интерфейс
io.Writer. В единственный параметр функция
принимает объект, куда будут записываться логи.
Синтаксис
log.SetOutput(w io.Writer)
Пример
Давайте перенаправим вывод логов в файл:
package main
import (
"log"
"os"
)
func main() {
file, err := os.Create("app.log")
if err != nil {
log.Fatal(err)
}
defer file.Close()
log.SetOutput(file)
log.Println("This message goes to the log file")
}
В результате выполнения кода в текущей директории
будет создан файл app.log с записанным
в него сообщением.
Пример
Давайте перенаправим вывод логов в буфер:
package main
import (
"bytes"
"fmt"
"log"
)
func main() {
var buf bytes.Buffer
log.SetOutput(&buf)
log.Print("Log message 1")
log.Print("Log message 2")
fmt.Println(buf.String())
}
Результат выполнения кода:
"2026/09/04 12:34:56 Log message 1
2026/09/04 12:34:56 Log message 2"
Все сообщения записались в буфер, который затем был выведен в консоль. Обратите внимание, что стандартный вывод логов содержит временную метку.
Пример
Давайте вернем вывод логов в стандартный поток ошибок после перенаправления:
package main
import (
"bytes"
"log"
"os"
)
func main() {
var buf bytes.Buffer
log.SetOutput(&buf)
log.Println("Written to buffer")
log.SetOutput(os.Stderr)
log.Println("Written to stderr")
}
Первое сообщение попадет в буфер, а второе будет выведено в стандартный поток ошибок. Это демонстрирует, что функцию можно вызывать многократно, каждый раз меняя место назначения логов.
Смотрите также
-
функцию
log.SetFlags,
которая устанавливает флаги форматирования логов -
функцию
log.SetPrefix,
которая устанавливает префикс для логов -
функцию
log.Print,
которая выводит сообщение в лог -
функцию
log.New,
которая создает новый логгер с указанным выводом