arimelody-web/service/log/log.go

57 lines
1.4 KiB
Go

package log
import (
"arimelody-web/model"
repository "arimelody-web/repository/log"
"fmt"
"log"
"time"
)
type LogService struct {
repo repository.LogRepository
log *log.Logger
}
func NewLogService(repo repository.LogRepository, logger *log.Logger) *LogService {
return &LogService{
repo: repo,
log: logger,
}
}
const DEFAULT_LOG_PAGE_LENGTH = 25
func (s *LogService) Info(logType string, format string, args ...any) {
logString := fmt.Sprintf(format, args...)
s.log.Printf("[%s] [%s] INFO: %s\n", time.Now().Format(time.UnixDate), logType, logString)
if err := s.repo.Create(model.LEVEL_INFO, logType, logString); err != nil {
log.Printf("WARN: Failed to push log to database: %v\n", err)
}
}
func (s *LogService) Warn(logType string, format string, args ...any) {
logString := fmt.Sprintf(format, args...)
log.Printf("[%s] [%s] WARN: %s\n", time.Now().Format(time.UnixDate), logType, logString)
if err := s.repo.Create(model.LEVEL_INFO, logType, logString); err != nil {
log.Printf("WARN: Failed to push log to database: %v\n", err)
}
}
func (s *LogService) Fetch(id string) (*model.Log, error) {
return s.repo.Get(id)
}
func (s *LogService) Search(
levelFilters []model.LogLevel,
typeFilters []string,
content string,
limit int,
offset int,
) ([]*model.Log, error) {
return s.repo.Search(levelFilters, typeFilters, content, limit, offset)
}