research type zap loggers
This commit is contained in:
parent
87342c67b8
commit
3118bb3813
66
ZAPLOGGERR.md
Normal file
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
|
||||||
|
```
|
||||||
|
|
||||||
Loading…
Reference in New Issue
Block a user