soundcloud-sync
Version:
Sync your SoundCloud likes to local files
68 lines (67 loc) • 2.35 kB
JavaScript
import process from 'node:process';
function formatDate(date) {
const year = date.getFullYear();
const month = (date.getMonth() + 1).toString().padStart(2, '0');
const day = date.getDate().toString().padStart(2, '0');
const hours = date.getHours().toString().padStart(2, '0');
const minutes = date.getMinutes().toString().padStart(2, '0');
const seconds = date.getSeconds().toString().padStart(2, '0');
const ms = date.getMilliseconds().toString().padStart(3, '0');
const offset = -date.getTimezoneOffset();
const offsetHours = Math.floor(Math.abs(offset) / 60)
.toString()
.padStart(2, '0');
const offsetMinutes = (Math.abs(offset) % 60).toString().padStart(2, '0');
const offsetSign = offset >= 0 ? '+' : '-';
return `[${year}-${month}-${day} ${hours}:${minutes}:${seconds}.${ms} ${offsetSign}${offsetHours}${offsetMinutes}]`;
}
function formatMessage(level, ...args) {
const timestamp = formatDate(new Date());
const parts = args.map(arg => {
if (typeof arg === 'string')
return arg;
return JSON.stringify(arg, null, 2);
});
return `${timestamp} ${level}: ${parts.join(' ')}`;
}
class Logger {
constructor() {
this.level = 'INFO';
}
trace(...args) {
if (this.isEnabled('TRACE')) {
console.log(formatMessage('TRACE', ...args));
}
}
debug(...args) {
if (this.isEnabled('DEBUG')) {
console.log(formatMessage('DEBUG', ...args));
}
}
info(...args) {
if (this.isEnabled('INFO')) {
console.log(formatMessage('INFO', ...args));
}
}
warn(...args) {
if (this.isEnabled('WARN')) {
console.log(formatMessage('WARN', ...args));
}
}
error(...args) {
if (this.isEnabled('ERROR')) {
console.error(formatMessage('ERROR', ...args));
}
}
fatal(...args) {
if (this.isEnabled('FATAL')) {
console.error(formatMessage('FATAL', ...args));
}
}
isEnabled(level) {
const levels = ['TRACE', 'DEBUG', 'INFO', 'WARN', 'ERROR', 'FATAL'];
const currentLevel = process.env.LOG_LEVEL?.toUpperCase() || this.level;
return levels.indexOf(level) >= levels.indexOf(currentLevel);
}
}
export default new Logger();