feat: add new logger and translation
This commit is contained in:
		
							
								
								
									
										93
									
								
								internal/logger/log.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								internal/logger/log.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,93 @@ | ||||
| // ALR - Any Linux Repository | ||||
| // Copyright (C) 2025 Евгений Храмов | ||||
| // | ||||
| // This program is free software: you can redistribute it and/or modify | ||||
| // it under the terms of the GNU General Public License as published by | ||||
| // the Free Software Foundation, either version 3 of the License, or | ||||
| // (at your option) any later version. | ||||
| // | ||||
| // This program is distributed in the hope that it will be useful, | ||||
| // but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| // GNU General Public License for more details. | ||||
| // | ||||
| // You should have received a copy of the GNU General Public License | ||||
| // along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
|  | ||||
| package logger | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"log/slog" | ||||
| 	"os" | ||||
|  | ||||
| 	"github.com/charmbracelet/lipgloss" | ||||
| 	"github.com/charmbracelet/log" | ||||
| 	"github.com/leonelquinteros/gotext" | ||||
| ) | ||||
|  | ||||
| type Logger struct { | ||||
| 	lOut slog.Handler | ||||
| 	lErr slog.Handler | ||||
| } | ||||
|  | ||||
| func setupOutLogger() *log.Logger { | ||||
| 	styles := log.DefaultStyles() | ||||
| 	logger := log.New(os.Stdout) | ||||
| 	logger.SetStyles(styles) | ||||
| 	return logger | ||||
| } | ||||
|  | ||||
| func setupErrorLogger() *log.Logger { | ||||
| 	styles := log.DefaultStyles() | ||||
| 	styles.Levels[log.ErrorLevel] = lipgloss.NewStyle(). | ||||
| 		SetString(gotext.Get("ERROR")). | ||||
| 		Padding(0, 1, 0, 1). | ||||
| 		Background(lipgloss.Color("204")). | ||||
| 		Foreground(lipgloss.Color("0")) | ||||
| 	logger := log.New(os.Stderr) | ||||
| 	logger.SetStyles(styles) | ||||
| 	return logger | ||||
| } | ||||
|  | ||||
| func New() *Logger { | ||||
| 	standardLogger := setupOutLogger() | ||||
| 	errLogger := setupErrorLogger() | ||||
| 	return &Logger{ | ||||
| 		lOut: standardLogger, | ||||
| 		lErr: errLogger, | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (l *Logger) Enabled(ctx context.Context, level slog.Level) bool { | ||||
| 	if level <= slog.LevelInfo { | ||||
| 		return l.lOut.Enabled(ctx, level) | ||||
| 	} | ||||
| 	return l.lErr.Enabled(ctx, level) | ||||
| } | ||||
|  | ||||
| func (l *Logger) Handle(ctx context.Context, rec slog.Record) error { | ||||
| 	if rec.Level <= slog.LevelInfo { | ||||
| 		return l.lOut.Handle(ctx, rec) | ||||
| 	} | ||||
| 	return l.lErr.Handle(ctx, rec) | ||||
| } | ||||
|  | ||||
| func (l *Logger) WithAttrs(attrs []slog.Attr) slog.Handler { | ||||
| 	sl := *l | ||||
| 	sl.lOut = l.lOut.WithAttrs(attrs) | ||||
| 	sl.lErr = l.lErr.WithAttrs(attrs) | ||||
| 	return &sl | ||||
| } | ||||
|  | ||||
| func (l *Logger) WithGroup(name string) slog.Handler { | ||||
| 	sl := *l | ||||
| 	sl.lOut = l.lOut.WithGroup(name) | ||||
| 	sl.lErr = l.lErr.WithGroup(name) | ||||
| 	return &sl | ||||
| } | ||||
|  | ||||
| func SetupDefault() { | ||||
| 	logger := slog.New(New()) | ||||
| 	slog.SetDefault(logger) | ||||
| } | ||||
		Reference in New Issue
	
	Block a user