2019-03-09 03:31:29 +00:00
|
|
|
'use strict'
|
|
|
|
|
2019-08-04 23:38:45 +00:00
|
|
|
import { Logger, transports } from 'winston';
|
|
|
|
import { join } from 'path';
|
|
|
|
import { mkdir, exists } from 'fs-extra';
|
|
|
|
import { homedir } from 'os';
|
2019-03-09 03:31:29 +00:00
|
|
|
|
|
|
|
const logTime = 'MM/DD/YY-HH:mm:ss'
|
|
|
|
let transport : any
|
|
|
|
|
2019-03-18 20:50:40 +00:00
|
|
|
/**
|
|
|
|
* Determine the location of the log file based on the operating system
|
|
|
|
* and return as an absolute string from os.homedir()
|
|
|
|
*
|
|
|
|
* @returns {string} Path to log file
|
|
|
|
**/
|
2019-03-09 03:31:29 +00:00
|
|
|
async function logFile () {
|
2019-08-04 23:38:45 +00:00
|
|
|
const homeDir : string = homedir();
|
2019-03-21 22:01:41 +00:00
|
|
|
const linuxDir : string = `/.config/mcopy/`;
|
|
|
|
const macDir : string = `/Library/Logs/mcopy/`;
|
|
|
|
const winDir : string = `/AppData/Roaming/mcopy/`;
|
2019-08-04 23:38:45 +00:00
|
|
|
let logPath : string = join(homeDir, linuxDir);
|
|
|
|
let dirExists : boolean;
|
2019-03-18 20:50:40 +00:00
|
|
|
|
2019-03-09 03:31:29 +00:00
|
|
|
if (process.platform === 'darwin') {
|
2019-08-04 23:38:45 +00:00
|
|
|
logPath = join(homeDir, macDir);
|
2019-03-09 03:31:29 +00:00
|
|
|
} else if (process.platform === 'win32') {
|
2019-08-04 23:38:45 +00:00
|
|
|
logPath = join(homeDir, winDir);
|
2019-03-09 03:31:29 +00:00
|
|
|
}
|
2019-08-04 23:38:45 +00:00
|
|
|
dirExists = await exists(logPath);
|
|
|
|
if (!dirExists) {
|
|
|
|
await mkdir(logPath);
|
2019-03-09 03:31:29 +00:00
|
|
|
}
|
2019-08-04 23:38:45 +00:00
|
|
|
return join(logPath, 'mcopy.log');
|
2019-03-09 03:31:29 +00:00
|
|
|
}
|
2019-03-18 20:50:40 +00:00
|
|
|
/**
|
|
|
|
* Create and return the logger transport based on settings determined in
|
|
|
|
* arguments object
|
|
|
|
*
|
|
|
|
* @param {object} arg Arguments from process
|
|
|
|
*
|
|
|
|
* @returns {object} Logger transport
|
|
|
|
**/
|
2019-03-09 03:31:29 +00:00
|
|
|
module.exports = async function (arg : any) {
|
2019-08-04 23:38:45 +00:00
|
|
|
let consoleFormat : any = {
|
|
|
|
colorize : true
|
|
|
|
}
|
|
|
|
let fileFormat : any = {
|
|
|
|
filename : await logFile(),
|
|
|
|
json : true
|
|
|
|
}
|
2019-03-21 19:54:55 +00:00
|
|
|
if (arg && arg.quiet) {
|
2019-03-09 03:31:29 +00:00
|
|
|
transport = {
|
2019-04-15 20:11:18 +00:00
|
|
|
info : function () { return false },
|
|
|
|
warn : function () { return false },
|
|
|
|
error : function () { return false }
|
2019-03-09 03:31:29 +00:00
|
|
|
}
|
|
|
|
} else {
|
2019-03-21 19:54:55 +00:00
|
|
|
if (arg && arg.label) {
|
2019-08-04 23:38:45 +00:00
|
|
|
consoleFormat.label = arg.label;
|
|
|
|
fileFormat.label = arg.label;
|
2019-03-21 19:54:55 +00:00
|
|
|
}
|
2019-08-04 23:38:45 +00:00
|
|
|
transport = new (Logger)({
|
2019-03-09 03:31:29 +00:00
|
|
|
transports: [
|
2019-08-04 23:38:45 +00:00
|
|
|
new (transports.Console)(consoleFormat),
|
|
|
|
new (transports.File)(fileFormat)
|
2019-03-09 03:31:29 +00:00
|
|
|
]
|
|
|
|
})
|
|
|
|
}
|
|
|
|
return transport
|
|
|
|
}
|