commit 7c349372fd8f390ae322eb191ce82b794a4a22f7 Author: German Date: Sat May 30 19:24:01 2026 +0400 init diff --git a/README.md b/README.md new file mode 100644 index 0000000..117c0a6 --- /dev/null +++ b/README.md @@ -0,0 +1,25 @@ +# QShell Logger +Простой логгер для fish-скриптов: оформление ошибок и запись в файл. +## Установка +```sh +git clone https://gitlabor.ru/german/qshell-logger.git +cd qshell-logger +fish qshell-logger.fish +``` +## Функции +```sh +# Все функции поддерживают --help + # По уровням: + error ОТПРАВИТЕЛЬ СООБЩЕНИЕ + warning ОТПРАВИТЕЛЬ СООБЩЕНИЕ + debug ОТПРАВИТЕЛЬ СООБЩЕНИЕ + info ОТПРАВИТЕЛЬ СООБЩЕНИЕ + success ОТПРАВИТЕЛЬ СООБЩЕНИЕ + # Служебные + # Вывод в файл + logfile ИМЯ [МАКС_РАЗМЕР_В_БАЙТАХ] + # Сброс настроек + logreset + # Просмотр логов из файла + logview +``` \ No newline at end of file diff --git a/qshell-logger.fish b/qshell-logger.fish new file mode 100755 index 0000000..61174b1 --- /dev/null +++ b/qshell-logger.fish @@ -0,0 +1,158 @@ +#!/usr/bin/fish + +# QShell +# Simple error logger library for Fish-Shell +# Repository + +# Install: +# fish qshell.fish + +function qshell_debug_message_help -a error exp + if contains -- '--help' $exp; or contains -- '-h' $exp + echo "QShell $error message function" + echo " Format $error message" + echo "Using:" + echo " $error AUTHOR MESSAGE" + echo " $error --help" + echo " $error -h" + return 1 + end + return 0 +end + +function qshell_message_level -a author message level color exp + if not set -q __logger_file + qshell_debug_message_help success $exp && \ + printf "\033[1m$author: \033[$(printf $color)m$level: \033[0m$message\n" + else + if not set -q __logger_file_max_size; or not echo $__logger_file_max_size | grep '[0-9]' &> /dev/null + set -g __logger_file_max_size $(math "1024 * 128") + end + set -l size $(stat -c %s $__logger_file) + if test $size -ge $__logger_file_max_size + cat $__logger_file | tail -c $(math "$__logger_file_max_size / 2") > $__logger_file + end + qshell_debug_message_help success $exp && \ + printf "\033[1m$author: \033[$(printf $color)m$level: \033[0m$message\n" \ + >> $__logger_file + end +end + +function error -a author message + qshell_message_level $author $message "error" "31" $argv +end + +function warning -a author message + qshell_message_level $author $message "warning" "35" $argv +end + +function debug -a author message + qshell_message_level $author $message "debug" "33" $argv +end + +function info -a author message + qshell_message_level $author $message "info" "34" $argv +end + +function success -a author message + qshell_message_level $author $message "success" "32" $argv +end + +function logfile -a file max_size + if contains -- '--help' $argv; or contains -- '-h' $argv + echo "QShell logfile function" + echo " Set file for logging" + echo "Using:" + echo " logfile FILE_NAME MAX_BYTES_SIZE" + echo " logfile --help" + echo " logfile -h" + return + end + if set -q max_size + set -g __logger_file_max_size $(echo $max_size | tr -cd '[:digit:]') + end + set -g __logger_file "$file" +end + +function logreset + if contains -- '--help' $argv; or contains -- '-h' $argv + echo "QShell logreset function" + echo " Reset logging variables" + echo "Using:" + echo " logreset" + echo " logreset --help" + echo " logreset -h" + return + end + set -e __logger_file + set -e __logger_file_max_size +end + +function logview + if contains -- '--help' $argv; or contains -- '-h' $argv + echo "QShell logview function" + echo " View logs" + echo "Using:" + echo " logview" + echo " logview --help" + echo " logview -h" + return + end + if not set -q __logger_file + return + end + cat $__logger_file +end + +set -l functions \ + 'qshell_debug_message_help' \ + 'qshell_message_level' \ + 'error' \ + 'warning' \ + 'info' \ + 'debug' \ + 'success' \ + 'logfile' \ + 'logreset' \ + 'logview' + +set -l user_catalog $(pwd) + +if not set -q __fish_config_dir + printf "\033[1mqshell: \033[31merror: \033[0mcannot find variable __fish_config_dir\n" + exit 1 +end + +cd $__fish_config_dir + +if not test -f config.fish + printf "\033[1mqshell: \033[35mwarning: \033[0mcannot find file config.fish\n" + touch config.fish +end + +set -l file_end_char $(cat config.fish | tail -c 1) + +if test "$file_end_char" != "$(printf "\n")" + echo >> config.fish +end + +if cat config.fish | grep "# Auto generated by QShell\.fish" &> /dev/null + printf "\033[1mqshell: \033[35mwarning: \033[0mRewriting old function in config file\n" +end + +cat config.fish | \ + sed "s/# Auto generated by QShell\.fish.*# End auto generated by QShell\.fish//g" \ + > config.fish + +echo "# Auto generated by QShell.fish" >> config.fish + +for name in $functions + functions $name >> config.fish + echo >> config.fish +end + +echo "# End auto generated by QShell.fish" >> config.fish + +info "qshell" "QShell success installed!" + +cd $user_catalog \ No newline at end of file