mirror of
https://github.com/zulip/zulip-desktop.git
synced 2025-11-03 21:43:18 +00:00
Merge pull request #363 from cPhost/logger
logger-util: Code refactoring and better logs design.
This commit is contained in:
@@ -4,9 +4,9 @@ const fs = require('fs');
|
|||||||
const path = require('path');
|
const path = require('path');
|
||||||
const process = require('process');
|
const process = require('process');
|
||||||
const JsonDB = require('node-json-db');
|
const JsonDB = require('node-json-db');
|
||||||
const Console = require('./console-util');
|
const Logger = require('./logger-util');
|
||||||
|
|
||||||
const logger = new Console({
|
const logger = new Logger({
|
||||||
file: 'config-util.log',
|
file: 'config-util.log',
|
||||||
timestamp: true
|
timestamp: true
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,73 +0,0 @@
|
|||||||
const NodeConsole = require('console').Console;
|
|
||||||
const fs = require('fs');
|
|
||||||
const isDev = require('electron-is-dev');
|
|
||||||
const { initSetUp } = require('./default-util');
|
|
||||||
|
|
||||||
initSetUp();
|
|
||||||
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`;
|
|
||||||
|
|
||||||
function customConsole(opts, type, ...args) {
|
|
||||||
const { nodeConsole, timestamp } = opts;
|
|
||||||
if (timestamp) {
|
|
||||||
args.unshift(timestamp());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isDev) {
|
|
||||||
const nodeConsoleLog = nodeConsole[type] || nodeConsole.log;
|
|
||||||
nodeConsoleLog.apply(null, args);
|
|
||||||
}
|
|
||||||
browserConsole[type].apply(null, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
function getTimestamp() {
|
|
||||||
const date = new Date();
|
|
||||||
const timestamp =
|
|
||||||
`${date.getMonth()}/${date.getDate()} ` +
|
|
||||||
`${date.getMinutes()}:${date.getSeconds()}`;
|
|
||||||
return timestamp;
|
|
||||||
}
|
|
||||||
|
|
||||||
function setConsoleProto(type) {
|
|
||||||
Object.defineProperty(this, type, {
|
|
||||||
value(...args) {
|
|
||||||
const { timestamp, nodeConsole } = this;
|
|
||||||
const opts = {
|
|
||||||
timestamp,
|
|
||||||
nodeConsole
|
|
||||||
};
|
|
||||||
customConsole.apply(null, [].concat(opts, type, args));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
class Console {
|
|
||||||
constructor(opts = {}) {
|
|
||||||
let { timestamp, file } = opts;
|
|
||||||
file = `${logDir}/${file || 'console.log'}`;
|
|
||||||
if (timestamp === true) {
|
|
||||||
timestamp = getTimestamp;
|
|
||||||
}
|
|
||||||
|
|
||||||
const fileStream = fs.createWriteStream(file, { flags: 'a' });
|
|
||||||
const nodeConsole = new NodeConsole(fileStream);
|
|
||||||
this.nodeConsole = nodeConsole;
|
|
||||||
this.timestamp = timestamp;
|
|
||||||
this.setUpConsole();
|
|
||||||
}
|
|
||||||
|
|
||||||
setUpConsole() {
|
|
||||||
for (const type in browserConsole) {
|
|
||||||
setConsoleProto.call(this, type);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = Console;
|
|
||||||
@@ -5,9 +5,9 @@ const fs = require('fs');
|
|||||||
const path = require('path');
|
const path = require('path');
|
||||||
const JsonDB = require('node-json-db');
|
const JsonDB = require('node-json-db');
|
||||||
const request = require('request');
|
const request = require('request');
|
||||||
const Console = require('./console-util');
|
const Logger = require('./logger-util');
|
||||||
|
|
||||||
const logger = new Console({
|
const logger = new Logger({
|
||||||
file: `domain-util.log`,
|
file: `domain-util.log`,
|
||||||
timestamp: true
|
timestamp: true
|
||||||
});
|
});
|
||||||
|
|||||||
87
app/renderer/js/utils/logger-util.js
Normal file
87
app/renderer/js/utils/logger-util.js
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
const NodeConsole = require('console').Console;
|
||||||
|
const fs = require('fs');
|
||||||
|
const isDev = require('electron-is-dev');
|
||||||
|
const { initSetUp } = require('./default-util');
|
||||||
|
|
||||||
|
initSetUp();
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = Logger;
|
||||||
Reference in New Issue
Block a user