Fish Shell:
Registrazione Eventi (Logging)

Come fare:

In Fish, effettuare il logging può essere semplice come reindirizzare gli output standard e gli stream di errore verso un file. Facendo un’entrata nel log per indicare l’inizio e la fine del nostro script.

function log_start
  echo (date "+%Y-%m-%d %H:%M:%S") " - Script avviato" >> my_app.log
end

function log_end
  echo (date "+%Y-%m-%d %H:%M:%S") " - Script terminato" >> my_app.log
end

log_start
# ... le operazioni del tuo script ...
log_end

cat my_app.log

Ecco cosa vedrai in my_app.log:

2023-04-01 10:35:47  - Script avviato
2023-04-01 10:36:02  - Script terminato

Per un logging avanzato, puoi utilizzare funzioni con parametri per il livello del log e messaggi:

function log_message --argument messaggio
  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 "Questo è un messaggio informativo."
log_message ERROR "Qualcosa è andato storto!"

Un esempio di output in my_app.log sarà:

2023-04-01 10:35:47 [INFO] Questo è un messaggio informativo.
2023-04-01 10:35:49 [ERROR] Qualcosa è andato storto!

Approfondimento

Storicamente, nei shell script il logging veniva effettuato con una serie di istruzioni echo, e anche se questa è ancora un’opzione praticabile, implementare sistemi più complessi può essere una sfida. Fish non dispone di un meccanismo di logging incorporato come altre shell o linguaggi di programmazione, quindi spesso è necessario sviluppare una propria soluzione.

Alternative al comando echo incorporato in Fish per il logging includono strumenti Unix come syslog o logger, che si interfacciano con il demone del log di sistema, offrendo un approccio più integrato al logging di eventi su tutto il sistema.

La semplicità di Fish ti consente di creare funzioni per gestire la verbosità del logging, impostando diversi livelli che puoi attivare o disattivare. Alcune implementazioni possono persino includere il nome dello script, il numero di riga e il timestamp, che facilita la risalita attraverso i passi che hanno portato a un evento.

Vedi Anche