loglint — это анализатор для Go, который проверяет соблюдение правил написания сообщений логов.
Реализована поддержка "log/slog" и "go.uber.org/zap".
На данный момент проверяет:
- Сообщения логов должны начинаться со строчной буквы.
- Сообщения не должны содержать чувствительные данные (например, "password", "token").
- Сообщения должны быть на английском языке.
- Не допускаются специальные символы и эмодзи.
Линтер написан с использованием фреймворка golang.org/x/tools/go/analysis.
Клонирование:
git clone https://github.com/pollumna/loglint.git
cd loglint/cmd/loglintСборка исполняемого файла:
go build -o loglintПосле этого в текущей директории появится файл loglint, который можно запускать:
./loglint ./...git clone https://github.com/pollumna/loglint.git
cd loglint/cmd/loglint
go installgo install github.com/pollumna/loglint/cmd/loglint@latestПосле этого в $GOBIN появится исполняемый файл loglint и его можно запускать из любой директории:
loglint ./...Например, на тестовых данных из директории проекта:
loglint ./testdata/src/invalid/nonenglish/loglint ./...loglint path/to/file.goНеправильно:
logger.Info("Starting server on port 8080")
slog.Error("ошибка")Правильно:
logger.Info("starting server on port 8080")
slog.Error("error")Тесты написаны с использованием analysistest из golang.org/x/tools/go/analysis/analysistest.
go test ./...Вы можете использовать loglint как плагин для golangci-lint.
Для этого в корне проекта есть файлы loglint.go, .custom-gcl.yml и .golangci.yaml.
Для сборки необходимо запустить golangci-lint custom в корне проекта.
Полученный файл ./custom-gcl - линтер golangci-lint с дополнительным плагином loglint.
Форк golangci-lint с уже добавленным loglint https://github.com/pollumna/golangci-lint
Для сборки необходимо клонировать проект и выполнить:
go build -o <name>.exe ./cmd/golangci-lintПолученный файл можно использовать в других проектах. Для корректного запуска в этом проекте собранного линтера
необходимо удалить файлы .custom-gcl.yml и .golangci.yaml.
Тестирование:
.\<name>.exe run .\pkg\golinters\loglint\testdata\ --enable=loglint --default=none --max-same-issues=0loglint/
├── analyzer/ # Реализация анализатора
├── cmd/loglint/ # CLI
├── testdata/ # Тестовые файлы для analysistest
├── loglint.go # Плагин для golangci-lint
├── go.mod
└── go.sum
- Поддержка автофикса сообщений
- Расширяемые правила конфигурации