Eu vi métodos usados como os de @ terdon. É o começo do que linguagens de programação de alto nível chamam de registradores, e oferecem como bibliotecas completas, como log4J (Java), log4Perl (Perl) etc.
Você pode obter algo semelhante usando set -x
no Bash, como você mencionou, mas você pode usá-lo para aumentar a depuração apenas de um subconjunto de comandos envolvendo blocos de código com eles da mesma forma.
$ set -x; cmd1; cmd2; set +x
Exemplos
Aqui está um padrão que você pode usar.
$ set -x; echo "hi" ;set +x
+ echo hi
hi
+ set +x
Você pode envolvê-los assim para vários comandos em um script.
set -x
cmd1
cmd2
set +x
cmd3
Log4Bash
A maioria das pessoas é alheia, mas o Bash também tem um log4 *, Log4Bash . Se você tem necessidades mais modestas, isso pode valer a pena para configurá-lo.
log4bash is an attempt to have better logging for Bash scripts (i.e. make logging in Bash suck less).
Exemplos
Aqui estão alguns exemplos de uso do log4bash.
#!/usr/bin/env bash
source log4bash.sh
log "This is regular log message... log and log_info do the same thing";
log_warning "Luke ... you turned off your targeting computer";
log_info "I have you now!";
log_success "You're all clear kid, now let's blow this thing and go home.";
log_error "One thing's for sure, we're all gonna be a lot thinner.";
# If you have figlet installed -- you'll see some big letters on the screen!
log_captains "What was in the captain's toilet?";
# If you have the "say" command (e.g. on a Mac)
log_speak "Resistance is futile";
Log4sh
Se você quer o que eu classificaria como mais do poder total de um framework log4 *, eu daria Log4sh uma tentativa.
trecho
log4sh was originally developed to solve a logging problem I had in some of the production environments I have worked in where I either had too much logging, or not enough. Cron jobs in particular caused me the most headaches with their constant and annoying emails telling me that everything worked, or that nothing worked but not a detailed reason why. I now use log4sh in environments where logging from shell scripts is critical, but where I need more than just a simple "Hello, fix me!" type of logging message. If you like what you see, or have any suggestions on improvements, please feel free to drop me an email. If there is enough interest in the project, I will develop it further.
log4sh has been developed under the Bourne Again Shell (/bin/bash) on Linux, but great care has been taken to make sure it works under the default Bourne Shell of Solaris (/bin/sh) as this happens to be the primary production platform used by myself.
O Log4sh suporta vários shells, não apenas o Bash.
- Bourne Shell (sh)
- BASH - GNU Bourne Novamente SHell (bash)
- DASH (traço)
- Korn Shell (ksh)
- pdksh - o Public Domain Korn Shell (pdksh)
Ele também foi testado em vários sistemas operacionais, não apenas no Linux.
- Cygwin (no Windows)
- FreeBSD (suportado pelo usuário)
- Linux (Gentoo, RedHat, Ubuntu)
- Mac OS X
- Solaris 8, 9, 10
Usar um framework log4 * levará algum tempo para aprender, mas vale a pena se você tiver necessidades mais exigentes do seu registro. O Log4sh faz uso de um arquivo de configuração no qual você pode definir os anexadores e controlar a formatação da saída que será exibida.
Exemplo
#! /bin/sh
#
# log4sh example: Hello, world
#
# load log4sh (disabling properties file warning) and clear the default
# configuration
LOG4SH_CONFIGURATION='none' . ./log4sh
log4sh_resetConfiguration
# set the global logging level to INFO
logger_setLevel INFO
# add and configure a FileAppender that outputs to STDERR, and activate the
# configuration
logger_addAppender stderr
appender_setType stderr FileAppender
appender_file_setFile stderr STDERR
appender_activateOptions stderr
# say Hello to the world
logger_info 'Hello, world'
Agora, quando eu executo:
$ ./log4sh.bash
INFO - Hello, world
NOTA: O elemento acima configura o anexador como parte do código. Se você gosta disso pode ser extraído em seu próprio arquivo, log4sh.properties
etc.
Consulte a documentação excelente para o Log4sh se você precisa de mais detalhes.