Redirection de la sortie du processus vers les journaux dans Golang
Lors de l'exécution de processus externes dans Golang, il peut être utile de capturer et d'enregistrer leur sortie rapidement. En attendant la fin du processus et en utilisant CombinedOutput() permettant la journalisation, cela n'est pas pratique pour les processus de longue durée ou inachevés.
Alternativement, écrire sur Stdout en temps réel est insuffisant pour les services qui ne génèrent pas de sortie vers une borne. Une solution consiste à exploiter les canaux pour une redirection efficace des sorties.
Utiliser les canaux pour la redirection
Un canal crée une connexion entre les processus, permettant le transfert de données. Pour rediriger la sortie du processus vers les journaux, suivez ces étapes :
L'ajout d'un gestionnaire pour Stderr peut être réalisé en créant une goroutine pour la gestion simultanée des deux canaux de sortie .
Exemple de mise en œuvre :
Considérez l'extrait de code suivant utilisant des canaux pour la redirection de sortie :
stdout, err := cmd.StdoutPipe() if err != nil { return 0, err } if err := cmd.Start(); err != nil { return 0, err } in := bufio.NewScanner(stdout) for in.Scan() { log.Printf(in.Text()) } if err := in.Err(); err != nil { log.Printf("error: %s", err) }
En employant cette approche, vous pouvez efficacement capturer et enregistrer les résultats des processus externes en temps opportun, garantissant ainsi que des informations précieuses sont disponibles pour le débogage et l'analyse.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!