Bonus
Cette démonstration vous donne aussi un exemple de script qui peut être utilisé en tant pipe unix.
node src/app.js | log-p http://localhost:8000
Voici le code source de ce script :
#!/usr/bin/env node
const stdin = process.openStdin()
import {LogForwarder} from './utils/forwarder.js'
const [,, url] = process.argv
const logForwarder = new LogForwarder({
url,
pid: ""
});
stdin.on('data', (chunk) => {
logForwarder.info(chunk.toString().trim())
})
Info
Cette approche n'utilise pas le spawn Node.js mais est intéressante à étudier pour également transférer des logs vers un serveur.
Question ?
Quelle est l'instruction qui permet de récupérer les informations envoyées par notre application Node.js ?
Click me
#!/usr/bin/env node
const stdin = process.openStdin()
import {LogForwarder} from './utils/forwarder.js'
process.openStdin()
ouvre le flux d'entrée standard de Node.js et maintient le processus en vie tant que le flux est ouvert.
Attention !
Cette technique a aussi une limite ! À vous de la trouver 😉.
Click me
La limite de cette technique est que le Pipe Unix ne redirige que la sortie stdout
et pas stderr
. Il faut donc utiliser un autre moyen pour rediriger les erreurs afin de les transférer vers le serveur de log.
Sources
- Spawn: https://nodejs.org/api/child_process.html
- Send request: https://nodejs.org/api/http.html#class-httpclientrequest
- Create Server: https://nodejs.org/api/http.html#httpcreateserveroptions-requestlistener
- Pipe unix Node.js: https://stackoverflow.com/questions/16349706/how-to-pipe-node-js-scripts-together-using-the-unix-pipe-on-the-command-line