Files
vServer/Backend/tools/message.go

108 lines
2.8 KiB
Go
Raw 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 tools
import (
"fmt"
"log"
"os"
"regexp"
"time"
)
const (
Красный = "\033[31m"
Зелёный = "\033[32m"
Жёлтый = "\033[33m"
Синий = "\033[34m"
Голубой = "\033[36m"
Фиолетовый = "\033[35m"
Белый = "\033[37m"
Серый = "\033[90m"
Оранжевый = "\033[38;5;208m"
Сброс_Цвета = "\033[0m"
)
// Функция окрашивания текста
func Color(text, ansi string) string {
return ansi + text + Сброс_Цвета
}
// Функция для удаления ANSI-кодов из строки
func RemoveAnsiCodes(text string) string {
// Регулярное выражение для удаления ANSI escape sequences
ansiRegex := regexp.MustCompile(`\x1b\[[0-9;]*[a-zA-Z]`)
return ansiRegex.ReplaceAllString(text, "")
}
// Логирование в файл
/*
type_log:
0 - INFO
1 - ERROR
2 - WARNING
*/
func Logs_file(type_log int, service string, message string, log_file string, console bool) {
color_data := ""
service_str := Color(" ["+service+"] ", Жёлтый)
type_log_str := Color(" [INFO] ", Голубой)
log_files := log_file
switch type_log {
case 0:
type_log_str = Color(" [-INFOS-]", Голубой)
case 1:
type_log_str = Color(" [-ERROR-]", Красный)
case 2:
type_log_str = Color(" [WARNING]", Жёлтый)
}
if type_log == 1 {
color_data = Красный
} else {
color_data = Зелёный
}
if console {
// Очищаем текущую строку (стираем промпт >) и выводим лог с новой строки
fmt.Print("\r\033[K")
fmt.Println(Color(time.Now().Format("2006-01-02 15:04:05")+type_log_str+service_str+message, color_data))
}
// Создаем текст с цветами, затем удаляем ANSI-коды для файла
colored_text := time.Now().Format("2006-01-02 15:04:05") + type_log_str + service_str + message
text := RemoveAnsiCodes(colored_text) + "\n"
// Создаём папку logs если её нет
logsDir := "WebServer/tools/logs"
if _, err := os.Stat(logsDir); os.IsNotExist(err) {
if err := os.MkdirAll(logsDir, 0755); err != nil {
log.Fatal(err)
}
}
// Открываем файл для дозаписи, создаём если нет, права на запись.
filePath := logsDir + "/" + log_files
isNew := false
if _, err := os.Stat(filePath); os.IsNotExist(err) {
isNew = true
}
file, err := os.OpenFile(filePath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
log.Fatal(err)
}
defer file.Close()
// UTF-8 BOM для новых файлов (чтобы Windows корректно читал)
if isNew {
file.Write([]byte{0xEF, 0xBB, 0xBF})
}
// Пишем строку в файл
if _, err := file.WriteString(text); err != nil {
log.Fatal(err)
}
}