mirror of
https://github.com/legop3/MultiRoombaRover.git
synced 2026-09-16 09:31:20 -04:00
first lol
This commit is contained in:
@@ -1,8 +1,37 @@
|
||||
const sinks = new Set();
|
||||
|
||||
function notifySinks(level, label, args) {
|
||||
if (!sinks.size) return;
|
||||
const entry = {
|
||||
level,
|
||||
label: label || null,
|
||||
args,
|
||||
message: args.map((value) => {
|
||||
if (typeof value === 'string') return value;
|
||||
try {
|
||||
return JSON.stringify(value);
|
||||
} catch (err) {
|
||||
return String(value);
|
||||
}
|
||||
}).join(' '),
|
||||
timestamp: new Date().toISOString(),
|
||||
};
|
||||
sinks.forEach((sink) => {
|
||||
try {
|
||||
sink(entry);
|
||||
} catch (err) {
|
||||
// avoid recursive logging
|
||||
console.error(entry.timestamp, '[ERROR]', '[logger]', 'Log sink failed', err);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function stamp(level, label, args) {
|
||||
const fields = [new Date().toISOString(), `[${level}]`];
|
||||
if (label) {
|
||||
fields.push(`[${label}]`);
|
||||
}
|
||||
notifySinks(level, label, args);
|
||||
return [...fields, ...args];
|
||||
}
|
||||
|
||||
@@ -14,7 +43,14 @@ function baseLogger(label) {
|
||||
};
|
||||
}
|
||||
|
||||
function registerSink(fn) {
|
||||
if (typeof fn !== 'function') return () => {};
|
||||
sinks.add(fn);
|
||||
return () => sinks.delete(fn);
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
...baseLogger(),
|
||||
child: (label) => baseLogger(label),
|
||||
registerSink,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user