- Создана новая структура проекта с разделением на пакеты - Добавлены интерфейсы для всех сервисов (Git, Quartz, Files, Build) - Реализован Dependency Injection для сервисов - Добавлены middleware для логирования, Request ID и Response Time - Создан пакет конфигурации с валидацией - Улучшено логирование через интерфейс - Добавлены обработчики HTTP в отдельных пакетах - Создана структура для тестирования - Добавлены конфигурационные файлы и документация
131 lines
3.9 KiB
Go
131 lines
3.9 KiB
Go
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}
|
||
}
|