research type zap loggers

This commit is contained in:
pasha1coil 2025-04-14 18:04:33 +03:00
parent 87342c67b8
commit 3118bb3813

66
ZAPLOGGERR.md Normal file

@ -0,0 +1,66 @@
# Исследование `zap.NewProduction()` и `zap.NewDevelopment()` в пакете [`uber-go/zap`](https://github.com/uber-go/zap)
## `zap.NewProduction()`
#### Исходя из названия предназначен для использования в **продакшн-среде**
#### Ссылка на исходный код метода [тут](https://github.com/uber-go/zap/blob/6d482535bdd97f4d97b2f9573ac308f1cf9b574e/logger.go#L100)
#### Ссылка на [NewProductionConfig](https://github.com/uber-go/zap/blob/6d482535bdd97f4d97b2f9573ac308f1cf9b574e/config.go#L157)
#### Исходя из описания конфигурации продакшн логгера можно сделать ряд тезисов:
- Уровень логирования: Info, Warn, Error, DPanic, Panic, Fatal [ф-ция которая выставляет минимальный уровень логгирования: NewAtomicLevelAt](https://github.com/uber-go/zap/blob/6d482535bdd97f4d97b2f9573ac308f1cf9b574e/level.go#L87), [все возможные уровни](https://github.com/uber-go/zap/blob/6d482535bdd97f4d97b2f9573ac308f1cf9b574e/level.go#L30)
- Формат логов: JSON
- Стектрейсы: только для Error, DPanic, Panic, Fatal [определяется при Build в buildOptions](https://github.com/uber-go/zap/blob/6d482535bdd97f4d97b2f9573ac308f1cf9b574e/config.go#L275)
- Может использоваться совместно с агрегаторами логов которые смогут уже обрабатывать эти смые json`ы
- Поддержка Sampling: Помогает сократить поток однотипных сообщений, [дефолтные значения](https://github.com/uber-go/zap/blob/6d482535bdd97f4d97b2f9573ac308f1cf9b574e/config.go#L161)
## Зачем отключены `Debug`-логи и стектрейсы для `Info`, `Warn`?
Логи в продакшне должны быть максимально **нужными и структурированными**. Избыточная отладочная информация:
- Захламляет лог-файлы
- Замедляет работу агрегаторов логов
Если нужно получить больше деталей — отладка должна производиться в **рабочей/тестовой среде**, где можно использовать `zap.NewDevelopment()` с `Debug`-уровнем и включёнными стектрейсами даже для предупреждений
## `zap.NewDevelopment()`
#### Исходя из названия предназначен для использования в **рабочей-среде**
#### Ссылка на исходный код метода [тут](https://github.com/uber-go/zap/blob/6d482535bdd97f4d97b2f9573ac308f1cf9b574e/logger.go#L108)
#### Ссылка на [NewDevelopmentConfig](https://github.com/uber-go/zap/blob/6d482535bdd97f4d97b2f9573ac308f1cf9b574e/config.go#L227)
#### Исходя из описания конфигурации девелопмент логгера можно сделать ряд тезисов:
- Уровень логирования: Debug, Info, Warn, Error, DPanic, Panic, Fatal [ф-ция которая выставляет минимальный уровень логгирования: NewAtomicLevelAt](https://github.com/uber-go/zap/blob/6d482535bdd97f4d97b2f9573ac308f1cf9b574e/level.go#L87), [все возможные уровни](https://github.com/uber-go/zap/blob/6d482535bdd97f4d97b2f9573ac308f1cf9b574e/level.go#L30)
- Формат логов: Текст
- Стектрейсы: только для Warn, Error, DPanic, Panic, Fatal [определяется при Build в buildOptions](https://github.com/uber-go/zap/blob/6d482535bdd97f4d97b2f9573ac308f1cf9b574e/config.go#L275)
- Преимущество над production logger`ами это то что отладочная информация более расширенная
## Какой вывод можно сделать:
- **В продакшн-среде** рекомендуется использовать `zap.NewProduction()`:
- JSON-формат удобен для агрегаторов логов и мониторинга
- Фильтрация стектрейсов и `Debug` уровня снижает захламление
- Включён sampling, что помогает снизить нагрузку
- **В рабочей или тестовой-среде** удобно использовать `zap.NewDevelopment()`:
- Видны все логи, включая `Debug`
- Удобный для чтения формат
- Расширенные стектрейсы
## Примеры вывода
### Error:
#### `zap.NewProduction()`
```json
{"level":"error","ts":1744642298.2141063,"caller":"trash/main.go:15","msg":"Hello Error","error":"some error","stacktrace":"main.main\n\tpath/main.go:15\nruntime.main\n\tpath/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.4.windows-amd64/src/runtime/proc.go:272"}
```
#### `zap.NewDevelopment()`
```json
2025-04-14T17:53:32.591+0300 ERROR trash/main.go:15 Hello Error {"error": "some error"}
main.main
path/main.go:15
runtime.main
path/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.4.windows-amd64/src/runtime/proc.go:272
```