Files
go-webhook/pkg/logger/logger.go
Andrey Epifancev 04cea69d6e refactor: разделение кода на пакеты и улучшение архитектуры
- Создана новая структура проекта с разделением на пакеты
- Добавлены интерфейсы для всех сервисов (Git, Quartz, Files, Build)
- Реализован Dependency Injection для сервисов
- Добавлены middleware для логирования, Request ID и Response Time
- Создан пакет конфигурации с валидацией
- Улучшено логирование через интерфейс
- Добавлены обработчики HTTP в отдельных пакетах
- Создана структура для тестирования
- Добавлены конфигурационные файлы и документация
2025-08-11 19:45:54 +04:00

131 lines
3.9 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package logger
import (
"github.com/sirupsen/logrus"
)
// Logger интерфейс для логирования
type Logger interface {
Info(args ...interface{})
Infof(format string, args ...interface{})
Error(args ...interface{})
Errorf(format string, args ...interface{})
Warn(args ...interface{})
Warnf(format string, args ...interface{})
Debug(args ...interface{})
Debugf(format string, args ...interface{})
Fatalf(format string, args ...interface{})
WithField(key string, value interface{}) Logger
WithFields(fields map[string]interface{}) Logger
}
// logrusLogger реализация логгера через logrus
type logrusLogger struct {
logger *logrus.Logger
}
// New создает новый экземпляр логгера
func New() Logger {
logger := logrus.New()
logger.SetFormatter(&logrus.TextFormatter{
FullTimestamp: true,
})
logger.SetLevel(logrus.InfoLevel)
return &logrusLogger{logger: logger}
}
// NewWithLevel создает логгер с указанным уровнем
func NewWithLevel(level string) Logger {
logger := logrus.New()
logger.SetFormatter(&logrus.TextFormatter{
FullTimestamp: true,
})
switch level {
case "debug":
logger.SetLevel(logrus.DebugLevel)
case "info":
logger.SetLevel(logrus.InfoLevel)
case "warn":
logger.SetLevel(logrus.WarnLevel)
case "error":
logger.SetLevel(logrus.ErrorLevel)
default:
logger.SetLevel(logrus.InfoLevel)
}
return &logrusLogger{logger: logger}
}
// Info логирует информационное сообщение
func (l *logrusLogger) Info(args ...interface{}) {
l.logger.Info(args...)
}
// Fatalf логирует критическую ошибку и завершает программу
func (l *logrusLogger) Fatalf(format string, args ...interface{}) {
l.logger.Fatalf(format, args...)
}
// Infof логирует форматированное информационное сообщение
func (l *logrusLogger) Infof(format string, args ...interface{}) {
l.logger.Infof(format, args...)
}
// Error логирует сообщение об ошибке
func (l *logrusLogger) Error(args ...interface{}) {
l.logger.Error(args...)
}
// Errorf логирует форматированное сообщение об ошибке
func (l *logrusLogger) Errorf(format string, args ...interface{}) {
l.logger.Errorf(format, args...)
}
// Warn логирует предупреждение
func (l *logrusLogger) Warn(args ...interface{}) {
l.logger.Warn(args...)
}
// Warnf логирует форматированное предупреждение
func (l *logrusLogger) Warnf(format string, args ...interface{}) {
l.logger.Warnf(format, args...)
}
// Debug логирует отладочное сообщение
func (l *logrusLogger) Debug(args ...interface{}) {
l.logger.Debug(args...)
}
// Debugf логирует форматированное отладочное сообщение
func (l *logrusLogger) Debugf(format string, args ...interface{}) {
l.logger.Debugf(format, args...)
}
// WithField добавляет поле к логгеру
func (l *logrusLogger) WithField(key string, value interface{}) Logger {
// Создаем новый логгер с полем
newLogger := logrus.New()
newLogger.SetFormatter(l.logger.Formatter)
newLogger.SetLevel(l.logger.Level)
newLogger.SetOutput(l.logger.Out)
// Добавляем поле к контексту
newLogger.WithField(key, value)
return &logrusLogger{logger: newLogger}
}
// WithFields добавляет поля к логгеру
func (l *logrusLogger) WithFields(fields map[string]interface{}) Logger {
// Создаем новый логгер с полями
newLogger := logrus.New()
newLogger.SetFormatter(l.logger.Formatter)
newLogger.SetLevel(l.logger.Level)
newLogger.SetOutput(l.logger.Out)
// Добавляем поля к контексту
newLogger.WithFields(fields)
return &logrusLogger{logger: newLogger}
}