mirror of
https://github.com/zulip/zulip-desktop.git
synced 2025-10-24 16:43:38 +00:00
captureExceptions are used to report expected exceptions from domain-util.js and config-util.js. All files that include logger-util automatically includes sentry for those files and report unexpected exceptions to sentry.
94 lines
2.0 KiB
JavaScript
94 lines
2.0 KiB
JavaScript
const NodeConsole = require('console').Console;
|
|
const fs = require('fs');
|
|
const isDev = require('electron-is-dev');
|
|
const { initSetUp } = require('./default-util');
|
|
const { sentryInit, captureException } = require('./sentry-util');
|
|
|
|
initSetUp();
|
|
sentryInit();
|
|
let app = null;
|
|
if (process.type === 'renderer') {
|
|
app = require('electron').remote.app;
|
|
} else {
|
|
app = require('electron').app;
|
|
}
|
|
|
|
const browserConsole = console;
|
|
const logDir = `${app.getPath('userData')}/Logs`;
|
|
|
|
class Logger {
|
|
constructor(opts = {}) {
|
|
let {
|
|
timestamp = true,
|
|
file = 'console.log',
|
|
level = true,
|
|
logInDevMode = false
|
|
} = opts;
|
|
|
|
file = `${logDir}/${file}`;
|
|
if (timestamp === true) {
|
|
timestamp = this.getTimestamp;
|
|
}
|
|
|
|
const fileStream = fs.createWriteStream(file, { flags: 'a' });
|
|
const nodeConsole = new NodeConsole(fileStream);
|
|
|
|
this.nodeConsole = nodeConsole;
|
|
this.timestamp = timestamp;
|
|
this.level = level;
|
|
this.logInDevMode = logInDevMode;
|
|
this.setUpConsole();
|
|
}
|
|
|
|
_log(type, ...args) {
|
|
const {
|
|
nodeConsole, timestamp, level, logInDevMode
|
|
} = this;
|
|
let nodeConsoleLog;
|
|
|
|
/* eslint-disable no-fallthrough */
|
|
switch (true) {
|
|
case typeof timestamp === 'function':
|
|
args.unshift(timestamp() + ' |\t');
|
|
|
|
case (level !== false):
|
|
args.unshift(type.toUpperCase() + ' |');
|
|
|
|
case isDev || logInDevMode:
|
|
nodeConsoleLog = nodeConsole[type] || nodeConsole.log;
|
|
nodeConsoleLog.apply(null, args);
|
|
|
|
default: break;
|
|
}
|
|
/* eslint-enable no-fallthrough */
|
|
|
|
browserConsole[type].apply(null, args);
|
|
}
|
|
|
|
setUpConsole() {
|
|
for (const type in browserConsole) {
|
|
this.setupConsoleMethod(type);
|
|
}
|
|
}
|
|
|
|
setupConsoleMethod(type) {
|
|
this[type] = (...args) => {
|
|
this._log(type, ...args);
|
|
};
|
|
}
|
|
|
|
getTimestamp() {
|
|
const date = new Date();
|
|
const timestamp =
|
|
`${date.getMonth()}/${date.getDate()} ` +
|
|
`${date.getMinutes()}:${date.getSeconds()}`;
|
|
return timestamp;
|
|
}
|
|
|
|
reportSentry(err) {
|
|
captureException(err);
|
|
}
|
|
}
|
|
|
|
module.exports = Logger;
|