mirror of
https://github.com/zulip/zulip-desktop.git
synced 2025-11-02 04:53:17 +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 process = require('process');
|
||||
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',
|
||||
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 JsonDB = require('node-json-db');
|
||||
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`,
|
||||
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