Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Workaround for setLevel on undefined logger #1245

Merged
merged 4 commits into from
Mar 27, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 37 additions & 21 deletions raiden-dapp/src/utils/logstore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,29 +20,45 @@ interface RaidenDB extends DBSchema {

let db: IDBPDatabase<RaidenDB>;

/* istanbul ignore next */
function serializeError(e: Error): string {
// special handling of Errors, since firefox doesn't like to structure-clone it
// https://bugzilla.mozilla.org/show_bug.cgi?id=1556604
const strError = e.toString();
if (!e.stack) {
return strError;
} else if (e.stack.startsWith(strError)) {
return e.stack; // chrome includes error str repr on top of stack
} else {
return `${strError}\n${e.stack}`;
}
}

/* istanbul ignore next */
function filterMessage(message: any[]) {
if (message[0] === '%c prev state') return;
if (message[0] === '—— log end ——') return;
message = message.map(e => (e instanceof Error ? serializeError(e) : e));
if (typeof message[1] === 'string' && message[1].startsWith('color:'))
message.splice(1, 1);
return message;
}

function serialize(e: any) {
/* istanbul ignore next */
function serialize(e: any): string {
if (typeof e === 'string') return e;
else {
try {
return JSON.stringify(e);
} catch (err) {
try {
return JSON.stringify(e);
return e.toString();
} catch (err) {
try {
return e.toString();
} catch (err) {
return '<unserializable>';
}
return '<unserializable>';
}
}
}

/* istanbul ignore next */
export async function setupLogStore(
dbName = 'raiden',
additionalLoggers: string[] = ['matrix']
Expand All @@ -67,22 +83,22 @@ export async function setupLogStore(
return (...message: any[]): void => {
rawMethod(...message);
const filtered = filterMessage(message);
if (filtered !== undefined)
if (!filtered) return;
db.put(
collectionName,
{ logger: loggerName, level: methodName, message },
Date.now()
).catch(() =>
db.put(
collectionName,
{ logger: loggerName, level: methodName, message },
{
logger: loggerName,
level: methodName,
message: message.map(serialize)
},
Date.now()
).catch(() =>
db.put(
collectionName,
{
logger: loggerName,
level: methodName,
message: message.map(serialize)
},
Date.now()
)
);
)
);
};
};
}
Expand Down
4 changes: 2 additions & 2 deletions raiden-ts/src/global.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ declare module 'matrix-js-sdk/lib/utils' {
}

declare module 'matrix-js-sdk/lib/logger' {
import log from 'loglevel';
export const logger: log.Logger;
import { Logger } from 'loglevel';
export const logger: Logger;
}

declare module 'abort-controller/polyfill';
7 changes: 7 additions & 0 deletions raiden-ts/src/polyfills.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
import 'symbol-observable';
import 'isomorphic-fetch';
import 'abort-controller/polyfill';

// matrix-js-sdk monkey-patch root methodFactory
import logging from 'loglevel';
const methodFactory = logging.methodFactory;
import { logger as matrixLogger } from 'matrix-js-sdk/lib/logger';
Object.assign(logging, { methodFactory }); // revert
matrixLogger.setLevel(logging.levels.DEBUG); // apply
18 changes: 6 additions & 12 deletions raiden-ts/src/raiden.ts
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,9 @@ export class Raiden {
// for a given partial config, "memoize-one" full config (merge of default & partial configs)
private lastConfig?: [PartialRaidenConfig, RaidenConfig];

/** Instance's Logger, compatible with console's API */
private readonly log: logging.Logger;

public constructor(
provider: JsonRpcProvider,
network: Network,
Expand All @@ -152,7 +155,7 @@ export class Raiden {
) {
this.resolveName = provider.resolveName.bind(provider) as (name: string) => Promise<Address>;
const address = state.address;
const log = logging.getLogger(`raiden:${address}`);
this.log = logging.getLogger(`raiden:${address}`);

// use next from latest known blockNumber as start block when polling
provider.resetEventsBlock(state.blockNumber + 1);
Expand Down Expand Up @@ -190,7 +193,7 @@ export class Raiden {
network,
signer,
address,
log,
log: this.log,
contractsInfo,
registryContract: TokenNetworkRegistryFactory.connect(
contractsInfo.TokenNetworkRegistry.address,
Expand Down Expand Up @@ -223,7 +226,7 @@ export class Raiden {

const loggerMiddleware = createLogger({
predicate: () => this.log.getLevel() <= logging.levels.INFO,
logger: log,
logger: this.log,
level: {
prevState: 'debug',
action: 'info',
Expand Down Expand Up @@ -389,15 +392,6 @@ export class Raiden {
return this.deps.address;
}

/**
* Instance's Logger, compatible with console's API
*
* @returns Logger instance
*/
private get log(): logging.Logger {
return this.deps.log;
}

/**
* Get main account address (if subkey is being used, undefined otherwise)
*
Expand Down