Функция log.SetOutput

Функция log.SetOutput предназначена для изменения места записи логов пакета log. По умолчанию логи выводятся в стандартный поток ошибок (os.Stderr). С помощью этой функции можно перенаправить вывод в файл, сетевой сокет, буфер или любой другой объект, который реализует интерфейс io.Writer. В единственный параметр функция принимает объект, куда будут записываться логи.

Синтаксис

golog.SetOutput(w io.Writer)

Пример

Давайте перенаправим вывод логов в файл:

gopackage 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 с записанным в него сообщением.

Пример

Давайте перенаправим вывод логов в буфер:

gopackage 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())
}

Результат выполнения кода:

go"2026/09/04 12:34:56 Log message 1
2026/09/04 12:34:56 Log message 2"

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

Пример

Давайте вернем вывод логов в стандартный поток ошибок после перенаправления:

gopackage 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,
    которая создает новый логгер с указанным выводом