Comment rediriger simultanément la sortie d'une commande vers la console et le fichier journal en temps réel
Le code fourni imprime la sortie standard et le stderr d'une commande sur la console mais n'a pas la possibilité de l'enregistrer dans un fichier en temps réel. Cet article présente une solution utilisant MultiWriter pour obtenir une journalisation et une sortie console simultanées tout en respectant les critères suivants :
Les tentatives précédentes utilisant des scanners, io.Copy et d'autres techniques n'ont pas réussi à maintenir l'ordre de sortie en raison de conditions de concurrence potentielles entre les goroutines.
Solution : Utilisation de MultiWriter
La solution exploite le type io.MultiWriter, qui permet d'écrire vers plusieurs destinations simultanément. Voici le code révisé :
<code class="go">package main import ( "io" "log" "os" "os/exec" ) func main() { // Logging capability f, err := os.OpenFile("log.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666) if err != nil { log.Fatalf("Error opening file: %v", err) } defer f.Close() mwriter := io.MultiWriter(f, os.Stdout) cmd := exec.Command("ls") cmd.Stderr = mwriter cmd.Stdout = mwriter err = cmd.Run() //blocks until sub process is complete if err != nil { panic(err) } }</code>
L'instance mwriter de MultiWriter combine le fichier journal et la sortie standard. Lorsque vous spécifiez Stdout et Stderr pour la commande, utilisez mwriter pour vous assurer que la sortie de la console et la journalisation se produisent simultanément.
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!