Écrivez une exception exacte dans le fichier journal

J’ai un fichier de script shell et une ligne de commande sont:

mkdir test 

Lorsque j’exécute un fichier script shell, le dossier de test est créé. Même script de script shell exécuté une seconde fois et il génère une erreur “Le dossier de test existe déjà”.

Besoin :

Dans ce cas, je dois créer un fichier journal et écrire l’exception exacte dans le fichier journal.

Faites comme ci-dessous: –

 log_buffer=$(mkdir test 2>&1) #you can put any command under $() if [ $? -ne 0 ]; then echo "$log_buffer" >> log.txt fi 

D’abord qu’est-ce que 2>&1 ici? Normalement, si le mkdir test échoue, la sortie sera redirigée vers standard error par O / S. Dans ce cas, il ne sera pas stocké dans la variable log_buffer . Pour stocker la sortie, nous devons redirect l’erreur standard vers standard ouput et 2>&1 fait exactement la même chose

Maintenant qu’est ce que $? ici. Une fois que vous exécutez une commande shell, le statut de retour de la commande est stocké dans $? variable. Si une commande réussit dans Unix, la valeur stockée dans $? est égal à 0 et en cas d’échec, il s’agira d’un autre nombre / valeur basé sur le statut de sortie de ce programme. J’espère que cela aidera.

Tout d’abord, pour créer un fichier journal:

 import logging logging.basicConfig(filename='example.log',level=logging.DEBUG) 

Le, vous pouvez faire:

 try: # your logic goes here except Exception e: logging.exception("Full traceback of your error") 

Il mettra toute la traceback dans le fichier journal afin que vous puissiez explorer l’erreur

Essayez ceci pour enregistrer l’erreur exacte dans un fichier journal

 #!/bin/sh temp_file=$(mktemp) mkdir test 2>$temp_file if [ $? -ne 0 ]; then echo $(cat $temp_file) >> log.txt rm -f $temp_file fi 

mktemp commande mktemp crée un fichier temporaire dans le répertoire / tmp. Les fichiers de répertoires / tmp ne sont pas des fichiers sur disque et ils n’existent pas lors des redémarrages.