Go:
Логування

Як це зробити:

В Go логування може бути реалізоване за допомогою стандартного пакету бібліотеки log. Цей пакет надає прості можливості логування, такі як запис у стандартний вивід або в файли. Почнемо з основного прикладу логування до стандартного виводу:

package main

import (
	"log"
)

func main() {
	log.Println("Це базовий запис у лог.")
}

Вивід:

2009/11/10 23:00:00 Це базовий запис у лог.

Мітка часу на початку запису в лог автоматично додається пакетом log. Далі давайте розглянемо, як логувати у файл, замість стандартного виводу:

package main

import (
	"log"
	"os"
)

func main() {
	file, err := os.OpenFile("app.log", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0666)
	if err != nil {
		log.Fatal(err)
	}
	defer file.Close()

	log.SetOutput(file)
	log.Println("Цей запис у лог йде у файл.")
}

Тепер розглянемо більш передовий випадок використання: налаштування формату логування. Go дозволяє створити власний логер за допомогою ’log.New()':

package main

import (
	"log"
	"os"
)

func main() {
	logger := log.New(os.Stdout, "СПЕЦІАЛЬНИЙ ЛОГ: ", log.Ldate|log.Ltime|log.Lshortfile)
	logger.Println("Це власне повідомлення логу.")
}

Вивід:

СПЕЦІАЛЬНИЙ ЛОГ: 2009/11/10 23:00:00 main.go:11: Це власне повідомлення логу.

Цей приклад додає префікс “СПЕЦІАЛЬНИЙ ЛОГ: " до кожного повідомлення в логу та включає дату, час і місцезнаходження вихідного файлу.

Поглиблено

Стандартний пакет log бібліотеки Go є простим і достатнім для багатьох застосунків, але йому бракує деяких більш витончених особливостей, що знаходяться в сторонніх бібліотеках логування, таких як структуроване логування, ротація логів та логування залежно від рівня. Пакети на кшталт zap та logrus пропонують ці передові можливості та мають високу оцінку в спільноті Go за їхню продуктивність і гнучкість.

Наприклад, структуроване логування дозволяє записувати дані в структурованому форматі (як JSON), що особливо корисно для сучасних хмарних застосунків, де логи можуть аналізуватися різними інструментами або сервісами. zap зокрема відомий своєю високою продуктивністю та низьким обсягом алокацій, що робить його придатним для застосунків, де критично важливі швидкість та ефективність.

Історично, логування в Go значно еволюціонувало з моменту створення мови. Ранні версії Go надавали базові можливості логування, які ми бачимо в пакеті log. Однак, з ростом популярності мови та складності застосунків, написаних на Go, спільнота почала розробляти більш передові бібліотеки логування, аби задовольнити свої потреби. Сьогодні, хоча стандартний пакет log залишається прийнятним варіантом для простих застосунків, багато розробників звертаються до цих сторонніх рішень для більш складних вимог до логування.