Eu já vi métodos usados semelhantes aos do @ terdon. É o começo do que as linguagens de programação de nível mais alto chamam de registradores e oferecem bibliotecas completas, como log4J (Java), log4Perl (Perl) etc.
Você pode obter algo semelhante usando o set -x
Bash, como você mencionou, mas pode usá-lo para ativar a depuração apenas um subconjunto de comandos, agrupando blocos de código com eles dessa maneira.
$ set -x; cmd1; cmd2; set +x
Exemplos
Aqui está um padrão de liner que você pode usar.
$ set -x; echo "hi" ;set +x
+ echo hi
hi
+ set +x
Você pode agrupá-los dessa maneira para vários comandos em um script.
set -x
cmd1
cmd2
set +x
cmd3
Log4Bash
A maioria das pessoas não sabe, mas o Bash também possui um log4 *, o Log4Bash . Se você tiver necessidades mais modestas, pode valer a pena configurá-lo.
log4bash é uma tentativa de ter um melhor registro para scripts do Bash (ou seja, tornar o log no Bash menos trabalhoso).
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ê quiser o que eu classificaria como mais do poder total de uma estrutura log4 *, eu tentaria o Log4sh .
excerto
O log4sh foi desenvolvido originalmente para resolver um problema de registro que eu tive em alguns dos ambientes de produção em que trabalhei, onde eu tinha registro em excesso ou não o bastante. Os empregos de Cron, em particular, me causaram mais dores de cabeça com seus e-mails constantes e irritantes, dizendo que tudo funcionava ou que nada funcionava, mas não uma razão detalhada. Agora eu uso o log4sh em ambientes em que o log a partir de shell scripts é crítico, mas onde preciso mais do que apenas um simples "Olá, me conserte!" tipo de mensagem de log. Se você gosta do que vê, ou tem alguma sugestão de melhorias, sinta-se à vontade para me enviar um e-mail. Se houver interesse suficiente no projeto, vou desenvolvê-lo ainda mais.
O log4sh foi desenvolvido no Bourne Again Shell (/ bin / bash) no Linux, mas foi tomado muito cuidado para garantir que ele funcione no Bourne Shell do Solaris padrão (/ bin / sh), pois essa é a produção principal. plataforma usada por mim.
O Log4sh suporta vários shells, não apenas o Bash.
- Casca de Bourne (sh)
- BASH - GNU Bourne Novamente SHell (bash)
- DASH (traço)
- Korn Shell (ksh)
- pdksh - o Shell Korn de domínio público (pdksh)
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
O uso de uma estrutura log4 * levará algum tempo para aprender, mas vale a pena se você tiver necessidades mais exigentes do seu log. O Log4sh utiliza um arquivo de configuração onde você pode definir anexos 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 o executo:
$ ./log4sh.bash
INFO - Hello, world
NOTA: O item acima configura o appender como parte do código. Se você gosta disso, pode ser extraído em seu próprio arquivo, log4sh.properties
etc.
Consulte a excelente documentação do Log4sh se precisar de mais detalhes.
set -v
saída você deseja e quais não.