(core) Add LogMethods helper and use it for more JSON data in logs. Reduce unhelpful logging.

Summary:
- Sharing, Client, DocClients, HostingStorageManager all include available info.
- In HostingStorageManager, log numSteps and maxStepTimeMs, in case that helps
  debug SQLITE_BUSY problem.
- Replace some action-bundle logging with a JSON version aggregating some info.
- Skip logging detailed list of actions in production.

Test Plan: Tested manually by eyeballing log output in dev environment.

Reviewers: paulfitz

Reviewed By: paulfitz

Differential Revision: https://phab.getgrist.com/D3086
This commit is contained in:
Dmitry S
2021-10-25 09:29:06 -04:00
parent 8eeeae7fbf
commit f2f4fe0eca
9 changed files with 184 additions and 122 deletions

View File

@@ -0,0 +1,36 @@
import * as log from 'app/server/lib/log';
export type ILogMeta = log.ILogMeta;
/**
* Helper for logging with metadata. The created object has methods similar to those of the `log`
* module, but with an extra required first argument. The produced messages get metadata produced
* by the constructor callback applied to that argument, and the specified prefix.
*
* Usage:
* _log = new LogMethods(prefix, (info) => ({...logMetadata...}))
* _log.info(info, "hello %", name);
* _log.warn(info, "hello %", name);
* etc.
*/
export class LogMethods<Info> {
constructor(
private _prefix: string,
private _getMeta: (info: Info) => log.ILogMeta,
) {}
public debug(info: Info, msg: string, ...args: any[]) { this.log('debug', info, msg, ...args); }
public info(info: Info, msg: string, ...args: any[]) { this.log('info', info, msg, ...args); }
public warn(info: Info, msg: string, ...args: any[]) { this.log('warn', info, msg, ...args); }
public error(info: Info, msg: string, ...args: any[]) { this.log('error', info, msg, ...args); }
public log(level: string, info: Info, msg: string, ...args: any[]): void {
log.origLog(level, this._prefix + msg, ...args, this._getMeta(info));
}
// Log with the given level, and include the provided log metadata in addition to that produced
// by _getMeta(info).
public rawLog(level: string, info: Info, msg: string, meta: ILogMeta): void {
log.origLog(level, this._prefix + msg, {...this._getMeta(info), ...meta});
}
}