mirror of
				https://github.com/zulip/zulip-desktop.git
				synced 2025-10-30 11:33:36 +00:00 
			
		
		
		
	This imporves logging and refactors most of the code. This also renames console-util to logger-util.
		
			
				
	
	
		
			88 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 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;
 |