Ich habe diese einfache Funktion, die eine gewünschte Zeichenfolge an den Anfang jeder Zeile voranstellen wird. Ich habe dies mit Streams arbeiten, aber in einigen Fällen ist es auch bequem mit einem console.log() Typ des Konstrukts. HierKann Code nicht korrekt vorangestellt werden
ist die Funktion:
// nimmt einen String vorangestellt wird, und ein Strom vorangestellt zu:
exports.lp = function (str, strm) {
return function prependLog() {
var args = Array.from(arguments);
var hasNonWhitespace = args.some(function (a) {
var str = String(a);
return str.length > 0 && /\S/g.test(str);
});
if (hasNonWhitespace) {
strm.write(str);
}
args.forEach(function (s, i) {
String(s).split('\n').forEach(function (s, i) {
if (i < 1) {
strm.write(s + ' ');
}
else {
strm.write('\n' + str + s);
}
});
});
strm.write('\n');
};
};
Hier ist die Verwendung:
const {lp} = require('log-prepend');
const fn = lp(' [foobar] ', process.stdout);
fn('\n');
fn();
fn();
fn('','','');
fn('log1', 'log2\n3',4,5 + '\n55');
fn('a','b','c');
und hier ist die Ausgabe von oben:
[foobar]
[foobar] log1 log2
[foobar] 34 5
[foobar] 55
[foobar] a b c
das Problem ist, dass für leere Zeilen mit nicht-Leerzeichen, es funktioniert normalerweise, aber wenn ich ein Newline-Zeichen, es gibt [Foobar] obwohl es nichts in dieser Zeile ist.
Ich kann nicht herausfinden, warum meine Funktion [foobar]
nicht für Zeilen mit nicht-whitespace weglassen. Also, um genau zu sein, ist es die erste Instanz von [foobar]
darüber, die mich mystifiziert.
Ich machte eine Reparatur, es funktioniert jetzt wie erwartet. Ich suche immer noch nach einer effizienteren oder robusteren Art, es zu programmieren. –
Sie können es selbst testen, um zu sehen, ob es sich genau wie 'console.log()' oder 'console.error()' verhält, aber mit der gegebenen vorangestellten Zeichenfolge in jeder Zeile. –