mirror of
				https://github.com/zulip/zulip-desktop.git
				synced 2025-10-31 03:53:34 +00:00 
			
		
		
		
	logger-util: code refactoring and better logs design.
This imporves logging and refactors most of the code. This also renames console-util to logger-util.
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