mirror of
https://github.com/morten-olsen/react-native-debug-console.git
synced 2026-02-08 00:36:26 +01:00
V2 (#1)
This commit is contained in:
104
packages/lib/src/log.js
Normal file
104
packages/lib/src/log.js
Normal file
@@ -0,0 +1,104 @@
|
||||
export const proxyConsole = global.console;
|
||||
|
||||
class Log {
|
||||
constructor() {
|
||||
this.logs = [];
|
||||
this.listeners = [];
|
||||
this.clear = this.clear.bind(this);
|
||||
this.get = this.get.bind(this);
|
||||
this.handleError = this.handleError.bind(this);
|
||||
}
|
||||
|
||||
listen(fn) {
|
||||
this.listeners.push(fn);
|
||||
fn(this.logs);
|
||||
}
|
||||
|
||||
unlisten(fn) {
|
||||
this.listeners = this.listeners.filter(l => l !== fn);
|
||||
}
|
||||
|
||||
clear() {
|
||||
this.logs = [];
|
||||
this.listeners.forEach(l => l(this.logs));
|
||||
}
|
||||
|
||||
get() {
|
||||
return this.logs;
|
||||
}
|
||||
|
||||
log(type, data, keep) {
|
||||
if (data && data[0] && data[0].indexOf && data[0].indexOf('Warning: Using the "className" prop on') === 0) {
|
||||
return;
|
||||
}
|
||||
const entry = {
|
||||
type,
|
||||
data,
|
||||
};
|
||||
this.logs.push(entry);
|
||||
this.listeners.forEach(l => l(this.logs));
|
||||
if (keep) {
|
||||
proxyConsole[type](...data);
|
||||
}
|
||||
}
|
||||
|
||||
info(data, keep) {
|
||||
this.log('info', data, keep);
|
||||
}
|
||||
|
||||
error(data, keep) {
|
||||
this.log('error', data, keep);
|
||||
}
|
||||
|
||||
warn(data, keep) {
|
||||
this.log('warn', data, keep);
|
||||
}
|
||||
|
||||
debug(data, keep) {
|
||||
this.log('debug', data, keep);
|
||||
}
|
||||
|
||||
handleError(err) {
|
||||
if (err && err.error) {
|
||||
this.error([err.error]);
|
||||
}
|
||||
}
|
||||
|
||||
attach(keep) {
|
||||
const redirected = Object.keys(proxyConsole).reduce((output, key) => ({
|
||||
...output,
|
||||
[key]: keep ? (...args) => proxyConsole[key](...args) : () => {},
|
||||
}), {});
|
||||
global.console = {
|
||||
...redirected,
|
||||
error: (...data) => this.error(data, keep),
|
||||
warn: (...data) => this.warn(data, keep),
|
||||
info: (...data) => this.info(data, keep),
|
||||
log: (...data) => this.info(data, keep),
|
||||
debug: (...data) => this.debug(data, keep),
|
||||
verbose: (...data) => this.debug(data, keep),
|
||||
};
|
||||
/*if (global.ErrorUtils) {
|
||||
global.ErrorUtils.setGlobalHandler((err, fatal) => {
|
||||
this.error([err], keep);
|
||||
});
|
||||
}*/
|
||||
if (global.addEventListener) {
|
||||
global.addEventListener('error', this.handleError);
|
||||
}
|
||||
}
|
||||
|
||||
detach() {
|
||||
overrides.forEach((key) => {
|
||||
window.console[key] = proxies[key];
|
||||
});
|
||||
|
||||
if (global.removeEventListener) {
|
||||
global.removeEventListener('error', this.handleError);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const log = new Log();
|
||||
|
||||
export default log;
|
||||
Reference in New Issue
Block a user