@wener/console
Version:
Base console UI toolkit
49 lines (39 loc) • 970 B
text/typescript
import { useMemo } from 'react';
import { createStore } from 'zustand';
export function useLogger(name: string): Logger {
return useMemo(() => getLogger(name), [name]);
}
export interface Logger {
(...data: any[]): void;
debug(...data: any[]): void;
info(...data: any[]): void;
error(...data: any[]): void;
warn(...data: any[]): void;
}
const Store = createStore<{
loggers: Record<string, Logger>;
}>(() => {
return {
loggers: {},
};
});
export function getLogger(name: string): Logger {
const state = Store.getState();
let {
loggers: { [name]: log },
} = state;
if (!log) {
log = createLogger(name);
Store.setState({ loggers: { ...state.loggers, [name]: log } });
}
return log;
}
function createLogger(name: string) {
const log = (...args: any[]) => {
if (!name) {
return console.log(...args);
}
return console.log(`[${name}]`, ...args);
};
return Object.assign(log, { log, debug: log, info: log, error: log, warn: log });
}