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:8000Voici 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
BBL Node.js