Fish Shell:
Журналирование

Как:

В Fish логирование может быть таким же простым, как перенаправление стандартных потоков вывода и ошибок в файл. Давайте сделаем запись в лог о времени начала и окончания работы нашего скрипта.

function log_start
  echo (date "+%Y-%m-%d %H:%M:%S") " - Скрипт запущен" >> my_app.log
end

function log_end
  echo (date "+%Y-%m-%d %H:%M:%S") " - Скрипт завершён" >> my_app.log
end

log_start
# ... задачи вашего скрипта ...
log_end

cat my_app.log

Вот что вы увидите в my_app.log:

2023-04-01 10:35:47  - Скрипт запущен
2023-04-01 10:36:02  - Скрипт завершён

Для более сложного логирования вы можете использовать функции с параметрами для уровня логирования и сообщений:

function log_message --argument message
  switch "$argv[1]"
    case 'INFO' 'WARN' 'ERROR'
      set log_level $argv[1]
    case '*'
      set log_level 'DEBUG'
  end
  set log_msg (string join " " $argv[2..-1])
  echo (date "+%Y-%m-%d %H:%M:%S") "[$log_level]" $log_msg >> my_app.log
end

log_message INFO "Это информационное сообщение."
log_message ERROR "Что-то пошло не так!"

Пример вывода в my_app.log будет:

2023-04-01 10:35:47 [INFO] Это информационное сообщение.
2023-04-01 10:35:49 [ERROR] Что-то пошло не так!

Глубже

Исторически логирование в shell-скриптах выполнялось с помощью множества команд echo, и хотя это определённо по-прежнему вариант, реализация более сложных систем может быть вызовом. У Fish нет встроенного механизма логирования, как в некоторых других оболочках или языках программирования, поэтому часто приходится создавать своё.

Альтернативы встроенной команде echo в Fish для логирования включают в себя Unix-инструменты, такие как syslog или logger, которые взаимодействуют с системным демоном логирования и обеспечивают более интегрированный подход к логированию системных событий.

Простота Fish позволяет создавать функции для управления подробностью логирования, устанавливая разные уровни, которые можно включать или выключать. Некоторые реализации могут даже включать название скрипта, номер строки и временную метку, что упрощает процесс отслеживания шагов, приведших к событию.

Смотрите также