tabby/terminus-core/src/services/log.service.ts
2019-06-14 23:47:48 +02:00

76 lines
1.7 KiB
TypeScript

import { Injectable } from '@angular/core'
import { ElectronService } from './electron.service'
import * as winston from 'winston'
import * as fs from 'fs'
import * as path from 'path'
const initializeWinston = (electron: ElectronService) => {
const logDirectory = electron.app.getPath('userData')
if (!fs.existsSync(logDirectory)) {
fs.mkdirSync(logDirectory)
}
return winston.createLogger({
transports: [
new winston.transports.File({
level: 'debug',
filename: path.join(logDirectory, 'log.txt'),
format: winston.format.simple(),
handleExceptions: false,
maxsize: 5242880,
maxFiles: 5,
}),
],
exitOnError: false,
})
}
export class Logger {
constructor (
private winstonLogger: any,
private name: string,
) {}
debug (...args: any[]) {
this.doLog('debug', ...args)
}
info (...args: any[]) {
this.doLog('info', ...args)
}
warn (...args: any[]) {
this.doLog('warn', ...args)
}
error (...args: any[]) {
this.doLog('error', ...args)
}
log (...args: any[]) {
this.doLog('log', ...args)
}
private doLog (level: string, ...args: any[]) {
console[level](`%c[${this.name}]`, 'color: #aaa', ...args)
if (this.winstonLogger) {
this.winstonLogger[level](...args)
}
}
}
@Injectable({ providedIn: 'root' })
export class LogService {
private log: any
/** @hidden */
constructor (electron: ElectronService) {
this.log = initializeWinston(electron)
}
create (name: string): Logger {
return new Logger(this.log, name)
}
}