mirror of
				https://github.com/zulip/zulip-desktop.git
				synced 2025-11-04 05:53:21 +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