mcopy/src/log/index.ts

86 lines
1.9 KiB
TypeScript
Raw Normal View History

2019-03-09 03:31:29 +00:00
'use strict'
const { createLogger, format, transports } = require('winston')
const { combine, timestamp, label, colorize, simple, json } = format
2019-03-09 03:31:29 +00:00
const path = require('path')
const fs = require('fs-extra')
const os = require('os')
const logTime = 'MM/DD/YY-HH:mm:ss'
let transport : any
/**
* 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 () {
const homeDir : string = os.homedir();
const linuxDir : string = `/.config/mcopy/`;
const macDir : string = `/Library/Logs/mcopy/`;
const winDir : string = `/AppData/Roaming/mcopy/`;
let logPath : string = path.join(homeDir, linuxDir);
let exists : boolean;
2019-03-09 03:31:29 +00:00
if (process.platform === 'darwin') {
logPath = path.join(homeDir, macDir);
2019-03-09 03:31:29 +00:00
} else if (process.platform === 'win32') {
logPath = path.join(homeDir, winDir);
2019-03-09 03:31:29 +00:00
}
exists = await fs.exists(logPath);
2019-03-09 03:31:29 +00:00
if (!exists) {
await fs.mkdir(logPath);
2019-03-09 03:31:29 +00:00
}
return path.join(logPath, 'mcopy.log');
2019-03-09 03:31:29 +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) {
let format;
if (arg && arg.quiet) {
2019-03-09 03:31:29 +00:00
transport = {
info : function () {},
warn : function () {},
error : function () {}
}
} else {
if (arg && arg.label) {
format = combine(
label({ label : arg.label }),
//timestamp(),
colorize(),
simple()
);
} else {
format = combine(
//timestamp(),
colorize(),
simple()
);
}
2019-03-09 03:31:29 +00:00
transport = createLogger({
transports: [
new (transports.Console)({
format
2019-03-09 03:31:29 +00:00
}),
new (transports.File)({
filename: await logFile(),
format : combine(
label({ label : arg.label }),
//timestamp(),
json()
)
2019-03-09 03:31:29 +00:00
})
]
})
}
return transport
}