Version: 2
License: MIT (свободная лицензия)
Быстрый логгер для проекта MarusiaAI без внешних зависимостей.
- встроенная ротация файлов
- уровни логирования
DEBUG,INFO,WARNING,ERROR,FATAL - fluent API через
SetPatch(...).With...().Apply()иStdOut().With...().Apply() - опциональное отключение
callerдля ускорения - специальная поддержка
userID, если он передан последним аргументом какuint32
Если последним аргументом передан uint32, логгер автоматически добавляет его в строку в виде [USER:<id>].
userID := uint32(12345)
logger.Info("Пользователь вошел", userID)
// 2026/05/05 13:21:22 main.go:10: [INFO] [USER:12345] Пользователь вошелpackage main
import "github.com/ikermy/air-logger/v2/pkg/logger"
func main() {
logger.SetPatch("./logs/app.log").Apply()
defer logger.Close()
logger.Info("service started")
logger.Warn("cache miss")
userID := uint32(42)
logger.Info("user action", userID)
}logger.SetPatch("./logs/app.log").
WithLogLevel(logger.INFO).
WithMaxSize(10).
WithMaxBackups(5).
WithMaxAge(30).
WithCompress(true).
WithCaller(true).
Apply()Доступные настройки:
WithLogLevel(level)WithMaxSize(mb)WithMaxBackups(count)WithMaxAge(days)WithCompress(enabled)WithCaller(enabled)
Для режима только stdout:
logger.StdOut().
WithLogLevel(logger.INFO).
WithCaller(false).
Apply()В режиме StdOut() доступны только настройки уровня логирования и caller. Методы WithMaxSize, WithMaxBackups, WithMaxAge, WithCompress относятся только к файловому режиму через SetPatch(...).
С caller:
2026/05/05 13:21:22 main.go:15: [INFO] [USER:42] user action
Без caller:
2026/05/05 13:21:22: [INFO] user action
Актуальные локальные замеры на моих попугаях:
| Сценарий | Time | Memory | Allocs |
|---|---|---|---|
BenchmarkLogMessageConcatNew |
204.2 ns/op | 68 B/op | 2 allocs/op |
BenchmarkWriteLogFullPath |
548.1 ns/op | 352 B/op | 5 allocs/op |
BenchmarkWriteLogNoCaller |
125.9 ns/op | 101 B/op | 2 allocs/op |
BenchmarkDebugDisabled |
12.08 ns/op | 8 B/op | 0 allocs/op |
BenchmarkStdOutApply |
4.044 ns/op | 0 B/op | 0 allocs/op |
Для максимально быстрого режима:
logger.SetPatch("./logs/app.log").
WithCaller(false).
Apply()Для контейнеров используйте вывод только в stdout:
logger.StdOut().
WithLogLevel(logger.INFO).
WithCaller(false).
Apply()В этом режиме логгер не создаёт файл и не использует ротацию.
userID := uint32(42)
err := logger.GetUserLogs("./logs/app.log", userID, func(line string) {
println(line)
})
if err != nil {
panic(err)
}go test ./pkg/logger -v
go test ./pkg/logger -bench=. -benchmem -run=^$ -count=1pkg/logger/ основной пакет
examples/ примеры использования
logo.png логотип проекта
README.md основная документация
LICENSE лицензия
Свободная лицензия MIT. Подробности в LICENSE.
