Jak ovládat zprávy protokolu bez závislosti v Node.js

Dnes jsem na Twitteru viděl rychlý rozhovor mezi @ThisIsMisEm a @davidmarkclem. Jejich zprávy odhalily zajímavý fakt o ladění Node.js.

Miliony balíčků závisí na velmi oblíbeném ladicím balíčku. Poskytnuté debug umožňuje vývojářům Node.js řídit zasílání zpráv protokolu. Na rozdíl od staré dobré console.log , zprávy používající debug jsou ve výchozím nastavení skryté.

debug zprávy protokolu jsou vázány na název modulu a zobrazí se pouze při DEBUG Proměnná prostředí uvádí název konkrétního modulu.

// only logs message when `DEBUG=http` is set
const debug = require('debug')('http');

debug('booting %o', name);

util.debuglog – nativní debug alternativní

Ukazuje se, že Node.js má podobnou funkcionalitu zabudovanou. Metoda util.debuglog poskytuje téměř identické funkce.

Podívejme se na nativní příklad:

// index.js
const util = require('util');
const debuglog = util.debuglog('app');

debuglog('hello from my debugger [%d]', 123);

Když tento kód spustíte ve svém terminálu, neuvidíte žádné zprávy protokolu. Když však definujete, že máte test app protokolovat zprávy a definovat proměnnou prostředí NODE_DEBUG=app , zobrazí se zprávy protokolu:

$ NODE_DEBUG=app node index.js
APP 86155: hello from my debugger [123]

util.debuglog dokonce podporuje zástupné znaky (* ) v případě, že chcete povolit zprávy protokolu pro různé moduly najednou.

// index.js
const util = require('util');
const logGeneral = util.debuglog('app-general');
const logTimer = util.debuglog('app-timer');
const delay = 500;

logGeneral('Kicking off the app');

setTimeout(() => {
  logTimer('timer fired after %d', delay);
}, delay);

Spuštění skriptu s app-* Proměnná prostředí vede k následujícímu:

$ NODE_DEBUG=app-* node index.js
APP-GENERAL 86188: Kicking off the app
APP-TIMER 86188: timer fired after 500

NODE_DEBUG Proměnnou prostředí lze také použít k získání ladicích zpráv z interních souborů Node.js. Možná jste na něj občas narazili v dokumentaci Node.js.

Je perfektní vědět o util.debuglog , ale jak David zdůrazňuje, nativní varianta nepokrývá všechny debug funkčnost. Především debug vybarví vaše log zprávy pěkně a chybějící barvy mohou být pro pár lidí průlom.

Pro mě util.debuglog je dobrou alternativou pro debug balíček v menších projektech, ve kterých chci uložit závislost. Pokud se chcete dozvědět více o Node.js a jeho util modulu, přečtěte si dokumentaci k Node.js util nebo se podívejte do sekce Node.js na mém blogu.