mirror of
https://github.com/Eugeny/tabby.git
synced 2025-10-04 22:14:55 +00:00
56 lines
1.5 KiB
TypeScript
56 lines
1.5 KiB
TypeScript
import * as fs from 'fs'
|
|
import * as path from 'path'
|
|
import * as winston from 'winston'
|
|
import { Injectable } from '@angular/core'
|
|
import { ConsoleLogger, Logger } from 'tabby-core'
|
|
import { ElectronService } from '../services/electron.service'
|
|
|
|
const initializeWinston = (electron: ElectronService) => {
|
|
const logDirectory = electron.app.getPath('userData')
|
|
// eslint-disable-next-line
|
|
const winston = require('winston')
|
|
|
|
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 WinstonAndConsoleLogger extends ConsoleLogger {
|
|
constructor (private winstonLogger: winston.Logger, name: string) {
|
|
super(name)
|
|
}
|
|
|
|
protected doLog (level: string, ...args: any[]): void {
|
|
super.doLog(level, ...args)
|
|
this.winstonLogger[level](...args)
|
|
}
|
|
}
|
|
|
|
@Injectable({ providedIn: 'root' })
|
|
export class ElectronLogService {
|
|
private log: winston.Logger
|
|
|
|
/** @hidden */
|
|
constructor (electron: ElectronService) {
|
|
this.log = initializeWinston(electron)
|
|
}
|
|
|
|
create (name: string): Logger {
|
|
return new WinstonAndConsoleLogger(this.log, name)
|
|
}
|
|
}
|