123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- // @flow
-
- import { NativeModules } from 'react-native';
- import { format } from 'util';
-
- // Some code adapted from https://github.com/houserater/react-native-lumberjack
- // License: MIT
-
- const { LogBridge } = NativeModules;
-
- /**
- * Returns the stack trace for a given @code {Error} object.
- *
- * @param {Errror} e - The rrror.
- * @returns {string} - The stack trace.
- */
- function stackToString(e) {
- let ce;
- let s = e.stack;
-
- if (typeof e.cause === 'function' && (ce = e.cause())) {
- s += `\nCaused by: ${stackToString(ce)}`;
- }
-
- return s;
- }
-
- /**
- * Constructs a log transport object for use with jitsi-meet-logger.
- *
- * @returns {Object} - The transport object.
- */
- function buildTransport() {
- return [
- 'trace',
- 'debug',
- 'info',
- 'log',
- 'warn',
- 'error'
- ].reduce((logger, logName) => {
- logger[logName] = (timestamp: string, ...args: Array<string>) => {
- // It ignores the timestamp argument, because LogBridge will add it on the native side anyway
- const nargs = args.map(arg => {
- if (arg instanceof Error) {
- const errorBody = {
- message: arg.message,
- code: arg.code,
- stack: stackToString(arg)
- };
-
- return `Error(${arg.name})${JSON.stringify(errorBody)}`;
- }
-
- return arg;
- });
- const message = format(...nargs);
-
- LogBridge[logName](message);
- };
-
- return logger;
- }, {});
- }
-
- export default buildTransport();
|