J'ai vu des méthodes similaires à celles de @ terdon. Ce sont les débuts de ce que les langages de programmation de niveau supérieur appellent les enregistreurs, et proposent des bibliothèques complètes, telles que log4J (Java), log4Perl (Perl), etc.
Vous pouvez obtenir quelque chose de similaire en utilisant set -x
Bash comme vous l'avez mentionné, mais vous pouvez l'utiliser pour augmenter le débogage juste un sous-ensemble de commandes en enveloppant des blocs de code avec eux comme ça.
$ set -x; cmd1; cmd2; set +x
Exemples
Voici un motif à doublure que vous pouvez utiliser.
$ set -x; echo "hi" ;set +x
+ echo hi
hi
+ set +x
Vous pouvez les envelopper comme ceci pour plusieurs commandes dans un script.
set -x
cmd1
cmd2
set +x
cmd3
Log4Bash
La plupart des gens sont inconscients, mais Bash a également un log4 *, Log4Bash . Si vous avez des besoins plus modestes, cela peut valoir la peine de le configurer.
log4bash est une tentative d'avoir une meilleure journalisation pour les scripts Bash (c'est-à-dire que la journalisation dans Bash suce moins).
Exemples
Voici quelques exemples d'utilisation de 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
Si vous voulez ce que je qualifierais de plus de la pleine puissance d'un framework log4 *, j'essaierais Log4sh .
extrait
log4sh a été initialement développé pour résoudre un problème de journalisation que j'avais dans certains des environnements de production dans lesquels j'ai travaillé où j'avais trop de journalisation, ou pas assez. Les emplois Cron en particulier m'ont causé le plus de maux de tête avec leurs courriels constants et ennuyeux me disant que tout fonctionnait, ou que rien ne fonctionnait mais pas une raison détaillée pour laquelle. J'utilise maintenant log4sh dans des environnements où la journalisation à partir de scripts shell est critique, mais où j'ai besoin de plus qu'un simple "Bonjour, corrigez-moi!" type de message de journalisation. Si vous aimez ce que vous voyez ou avez des suggestions d'amélioration, n'hésitez pas à m'envoyer un e-mail. S'il y a suffisamment d'intérêt pour le projet, je le développerai davantage.
log4sh a été développé sous Bourne Again Shell (/ bin / bash) sous Linux, mais un grand soin a été pris pour s'assurer qu'il fonctionne sous le Bourne Shell par défaut de Solaris (/ bin / sh) car il se trouve que c'est la production principale plate-forme utilisée par moi-même.
Log4sh prend en charge plusieurs shells, pas seulement Bash.
- Bourne Shell (sh)
- BASH - GNU Bourne Again SHell (bash)
- DASH (tiret)
- Korn Shell (ksh)
- pdksh - le domaine public Korn Shell (pdksh)
Il a également été testé sur plusieurs systèmes d'exploitation, pas seulement Linux.
- Cygwin (sous Windows)
- FreeBSD (supporté par l'utilisateur)
- Linux (Gentoo, RedHat, Ubuntu)
- Mac OS X
- Solaris 8, 9, 10
L'utilisation d'un framework log4 * prendra un certain temps à apprendre, mais cela en vaut la peine si vous avez des besoins plus exigeants de votre journalisation. Log4sh utilise un fichier de configuration dans lequel vous pouvez définir des annexes et contrôler la mise en forme de la sortie qui apparaîtra.
Exemple
#! /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'
Maintenant, quand je l'exécute:
$ ./log4sh.bash
INFO - Hello, world
REMARQUE: ce qui précède configure l'appender dans le cadre du code. Si vous le souhaitez, cela peut être extrait dans son propre fichier, log4sh.properties
etc.
Consultez l' excellente documentation de Log4sh si vous avez besoin de plus de détails.
set -v
sortie vous souhaitez et lesquelles vous ne le souhaitez pas.