Достижение: Добавлены скрипты и документация для релиза PDF Compressor.

- Добавлен release-body.md для подробных заметок о релизе на русском языке.
- Реализован release-gitea.ps1 для автоматизированного релиза Gitea с помощью PowerShell.
- Создан release-gitea.sh для автоматизированного релиза Gitea с помощью Bash.
- Добавлен release.sh для сборки и маркировки релизов с поддержкой нескольких платформ.
- Улучшен пользовательский интерфейс благодаря информативному логированию и обработке ошибок.
- Добавлена ​​поддержка переменных окружения и управления конфигурацией.
- Добавлена ​​функция создания архивов и загрузки ресурсов в Gitea.
This commit is contained in:
Dmitriy Fofanov
2025-11-05 09:33:12 +03:00
parent f328d67080
commit ec65cfd05a
43 changed files with 5792 additions and 2 deletions

View File

@@ -0,0 +1,110 @@
package logging
import (
"fmt"
"log"
"os"
"strings"
)
// FileLogger реализация логгера в файл
type FileLogger struct {
file *os.File
logger *log.Logger
logLevel string
}
// NewFileLogger создает новый файловый логгер
func NewFileLogger(filename, logLevel string, maxSizeMB int, logToFile bool) (*FileLogger, error) {
if !logToFile {
return nil, nil
}
file, err := os.OpenFile(filename, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
return nil, err
}
logger := log.New(file, "", log.LstdFlags)
return &FileLogger{
file: file,
logger: logger,
logLevel: strings.ToLower(logLevel),
}, nil
}
// Debug логирует отладочное сообщение
func (l *FileLogger) Debug(format string, args ...interface{}) {
if l.shouldLog("debug") {
l.writeLog("DEBUG", format, args...)
}
}
// Info логирует информационное сообщение
func (l *FileLogger) Info(format string, args ...interface{}) {
if l.shouldLog("info") {
l.writeLog("INFO", format, args...)
}
}
// Warning логирует предупреждение
func (l *FileLogger) Warning(format string, args ...interface{}) {
if l.shouldLog("warning") {
l.writeLog("WARNING", format, args...)
}
}
// Error логирует ошибку
func (l *FileLogger) Error(format string, args ...interface{}) {
if l.shouldLog("error") {
l.writeLog("ERROR", format, args...)
}
}
// Success логирует успешное выполнение
func (l *FileLogger) Success(format string, args ...interface{}) {
if l.shouldLog("info") {
l.writeLog("SUCCESS", format, args...)
}
}
// Close закрывает логгер
func (l *FileLogger) Close() error {
if l.file != nil {
return l.file.Close()
}
return nil
}
// writeLog записывает лог
func (l *FileLogger) writeLog(level, format string, args ...interface{}) {
if l.logger == nil {
return
}
message := fmt.Sprintf(format, args...)
l.logger.Printf("[%s] %s", level, message)
}
// shouldLog проверяет, нужно ли логировать на данном уровне
func (l *FileLogger) shouldLog(level string) bool {
levels := map[string]int{
"debug": 0,
"info": 1,
"warning": 2,
"error": 3,
}
currentLevel, ok := levels[l.logLevel]
if !ok {
currentLevel = 1 // default to info
}
messageLevel, ok := levels[level]
if !ok {
return false
}
return messageLevel >= currentLevel
}