Write logs to a file
This commit is contained in:
parent
2fb5d8fe11
commit
a4a130bfc6
|
@ -4,6 +4,8 @@ dist
|
|||
etc
|
||||
release
|
||||
|
||||
tests/log.txt
|
||||
|
||||
# User data
|
||||
tests/data
|
||||
user.config.json
|
||||
|
|
|
@ -14,13 +14,17 @@ import { Events, CssEditor, Globals, Settings, Database, Updater, ModuleManager,
|
|||
import { ClientLogger as Logger, ClientIPC, Utils } from 'common';
|
||||
import { EmoteModule } from 'builtin';
|
||||
import electron from 'electron';
|
||||
import path from 'path';
|
||||
|
||||
const tests = true;
|
||||
const ignoreExternal = false;
|
||||
const DEV = true;
|
||||
|
||||
class BetterDiscord {
|
||||
|
||||
constructor() {
|
||||
Logger.file = tests ? path.join(__dirname, '..', '..', 'tests', 'log.txt') : path.join(__dirname, 'log.txt');
|
||||
Logger.log('main', 'BetterDiscord starting');
|
||||
|
||||
this._bd = {
|
||||
DOM, BdUI, Modals, Reflection,
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@ export default class {
|
|||
new SocketProxy(),
|
||||
new EventHook(),
|
||||
CssEditor,
|
||||
new Updater()
|
||||
Updater
|
||||
]);
|
||||
}
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@ import Globals from './globals';
|
|||
import { $ } from 'vendor';
|
||||
import { ClientLogger as Logger } from 'common';
|
||||
|
||||
export default class {
|
||||
export default new class {
|
||||
|
||||
constructor() {
|
||||
window.updater = this;
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
const
|
||||
path = require('path'),
|
||||
webpack = require('webpack');
|
||||
const path = require('path');
|
||||
const webpack = require('webpack');
|
||||
|
||||
const jsLoader = {
|
||||
test: /\.(js|jsx)$/,
|
||||
|
@ -9,18 +8,18 @@ const jsLoader = {
|
|||
query: {
|
||||
presets: ['react']
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const vueLoader = {
|
||||
test: /\.(vue)$/,
|
||||
loader: 'vue-loader'
|
||||
}
|
||||
};
|
||||
|
||||
const scssLoader = {
|
||||
test: /\.scss$/,
|
||||
exclude: /node_modules/,
|
||||
loader: ['css-loader', 'sass-loader']
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
entry: './src/index.js',
|
||||
|
@ -50,8 +49,13 @@ module.exports = {
|
|||
path.resolve('src', 'structs'),
|
||||
path.resolve('src', 'builtin')
|
||||
]
|
||||
},
|
||||
node: {
|
||||
process: false,
|
||||
__filename: false,
|
||||
__dirname: false
|
||||
}
|
||||
/* resolve: {
|
||||
/* resolve: {
|
||||
alias: {
|
||||
'momentjs': 'vendor/moment.min.js'
|
||||
},
|
||||
|
@ -60,5 +64,5 @@ module.exports = {
|
|||
path.resolve(__dirname, '..'),
|
||||
path.resolve(__dirname, '..', 'node_modules')
|
||||
]
|
||||
}*/
|
||||
} */
|
||||
};
|
||||
|
|
|
@ -9,34 +9,55 @@
|
|||
*/
|
||||
|
||||
import { Vendor } from 'modules';
|
||||
import { FileUtils } from './utils';
|
||||
|
||||
const logs = [];
|
||||
export const logLevels = {
|
||||
'log': 'log',
|
||||
'warn': 'warn',
|
||||
'err': 'error',
|
||||
'error': 'error',
|
||||
'debug': 'debug',
|
||||
'dbg': 'debug',
|
||||
'info': 'info'
|
||||
};
|
||||
|
||||
export class ClientLogger {
|
||||
export class Logger {
|
||||
|
||||
static err(module, message) { this.log(module, message, 'err'); }
|
||||
static warn(module, message) { this.log(module, message, 'warn'); }
|
||||
static info(module, message) { this.log(module, message, 'info'); }
|
||||
static dbg(module, message) { this.log(module, message, 'dbg'); }
|
||||
constructor(file) {
|
||||
this.logs = [];
|
||||
this.file = file;
|
||||
}
|
||||
|
||||
static log(module, message, level = 'log') {
|
||||
level = this.parseLevel(level);
|
||||
err(module, message) { this.log(module, message, 'err'); }
|
||||
warn(module, message) { this.log(module, message, 'warn'); }
|
||||
info(module, message) { this.log(module, message, 'info'); }
|
||||
dbg(module, message) { this.log(module, message, 'dbg'); }
|
||||
|
||||
log(module, message, level = 'log') {
|
||||
level = Logger.parseLevel(level);
|
||||
if (typeof message === 'object' && !(message instanceof Array)) {
|
||||
console[level]('[%cBetter%cDiscord:%s]', 'color: #3E82E5', '', `${module}${level === 'debug' ? '|DBG' : ''}`, message);
|
||||
let message_string = message.toString();
|
||||
if (message_string === '[object Object]')
|
||||
message_string += ' ' + JSON.stringify(message, null, 4);
|
||||
|
||||
logs.push(`${level.toUpperCase()} : [${Vendor.moment().format('DD/MM/YY hh:mm:ss')}|${module}] ${message_string}${message_string === '[object Object]' ? ' ' + JSON.stringify(message, null, 4) : ''}`);
|
||||
this.logs.push(`${level.toUpperCase()} : [${Logger.timestamp}|${module}] ${message_string}${message_string === '[object Object]' ? ' ' + JSON.stringify(message, null, 4) : ''}`);
|
||||
|
||||
if (this.file)
|
||||
FileUtils.appendToFile(this.file, `${level.toUpperCase()} : [${Logger.timestamp}|${module}] ${message_string}${message_string === '[object Object]' ? ' ' + JSON.stringify(message, null, 4) : ''}\n`);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
message = typeof message === 'object' && message instanceof Array ? message : [message];
|
||||
console[level]('[%cBetter%cDiscord:%s]', 'color: #3E82E5', '', `${module}${level === 'debug' ? '|DBG' : ''}`, ...message);
|
||||
logs.push(`${level.toUpperCase()} : [${Vendor.moment().format('DD/MM/YY hh:mm:ss')}|${module}] ${message.join(' ')}`);
|
||||
this.logs.push(`${level.toUpperCase()} : [${Logger.timestamp}|${module}] ${message.join(' ')}`);
|
||||
|
||||
if (this.file)
|
||||
FileUtils.appendToFile(this.file, `${level.toUpperCase()} : [${Logger.timestamp}|${module}] ${message.join(' ')}\n`);
|
||||
}
|
||||
|
||||
static logError(err) {
|
||||
logError(err) {
|
||||
if (!err.module && !err.message) {
|
||||
console.log(err);
|
||||
return;
|
||||
|
@ -44,24 +65,14 @@ export class ClientLogger {
|
|||
this.err(err.module, err.message);
|
||||
}
|
||||
|
||||
static get logs() {
|
||||
return logs;
|
||||
}
|
||||
|
||||
static get levels() {
|
||||
return {
|
||||
'log': 'log',
|
||||
'warn': 'warn',
|
||||
'err': 'error',
|
||||
'error': 'error',
|
||||
'debug': 'debug',
|
||||
'dbg': 'debug',
|
||||
'info': 'info'
|
||||
};
|
||||
}
|
||||
|
||||
static parseLevel(level) {
|
||||
return this.levels.hasOwnProperty(level) ? this.levels[level] : 'log';
|
||||
return logLevels.hasOwnProperty(level) ? logLevels[level] : 'log';
|
||||
}
|
||||
|
||||
static get timestamp() {
|
||||
return Vendor.moment().format('DD/MM/YY hh:mm:ss');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export const ClientLogger = new Logger();
|
||||
|
|
|
@ -386,6 +386,21 @@ export class FileUtils {
|
|||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes to the end of a file.
|
||||
* @param {String} path The file's path
|
||||
* @param {String} data The data to append to the file
|
||||
* @return {Promise}
|
||||
*/
|
||||
static async appendToFile(path, data) {
|
||||
return new Promise((resolve, reject) => {
|
||||
fs.appendFile(path, data, err => {
|
||||
if (err) reject(err);
|
||||
else resolve();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the contents of a file parsed as JSON.
|
||||
* @param {String} path The file's path
|
||||
|
|
Loading…
Reference in New Issue