Added logging system

This commit is contained in:
RemixDev
2022-02-28 14:58:25 +01:00
parent e1f7451e51
commit 1e14eb5b6b
16 changed files with 258 additions and 63 deletions

View File

@@ -1,10 +1,3 @@
import { concat } from 'ramda'
const prependDeemix = concat('[deemix-server]: ')
export const consoleInfo = (infoText: string) => console.info(prependDeemix(infoText))
export const consoleError = (errorText: string) => console.error(prependDeemix(errorText))
export class BadRequestError extends Error {
constructor() {
super()

View File

@@ -0,0 +1,51 @@
import fs from 'fs'
import { join as joinPath } from 'path'
import os from 'os'
import dateFormat from 'dateformat'
import { createLogger, format, transports } from 'winston'
// @ts-expect-error
import deemix from 'deemix'
const { combine, timestamp, errors, colorize, printf } = format
const logFolder: string = joinPath(deemix.utils.localpaths.getConfigFolder(), 'logs')
const logFilename = joinPath(logFolder, `${dateFormat(new Date(), 'yyyy-mm-dd-HH.MM.ss')}.log`)
const logFormat = printf(error => {
const { level, message, timestamp, stack } = error
let result = `${timestamp} [${level}] ${message}`
if (stack && !message.startsWith('uncaughtException')) result += '\n' + stack + '\n'
return result
})
export const logger = createLogger({
format: combine(errors({ stack: true }), timestamp(), logFormat),
transports: [
new transports.File({
handleExceptions: true,
handleRejections: true,
format: combine(errors({ stack: true }), timestamp(), logFormat),
filename: logFilename
}),
new transports.Console({
handleExceptions: true,
handleRejections: true,
format: combine(errors({ stack: true }), colorize(), timestamp(), logFormat)
})
]
})
export function removeOldLogs(logFilesNumber: number) {
if (!fs.existsSync(logFolder)) fs.mkdirSync(logFolder, { recursive: true })
fs.appendFileSync(logFilename, `${os.platform()} - ${os.type()} ${os.release()} ${os.arch()}\n\n`)
const files = fs.readdirSync(logFolder)
const logs: Array<string> = []
files.forEach(function (file) {
logs.push(file.substring(0, file.length - 4))
})
logs.sort()
if (logs.length > logFilesNumber) {
for (let i = 0; i < logs.length - logFilesNumber; i++) {
fs.unlinkSync(joinPath(logFolder, logs[i] + '.log'))
}
}
}

View File

@@ -1,6 +1,6 @@
import http from 'http'
import type { Debugger } from 'debug'
import { consoleInfo } from './errors'
import { logger } from './logger'
/**
* Event listener for HTTP server "error" event.
@@ -18,11 +18,11 @@ export function getErrorCb(port: number | string | boolean) {
// handle specific listen errors with friendly messages
switch (error.code) {
case 'EACCES': {
console.error(bind + ' requires elevated privileges')
logger.error(bind + ' requires elevated privileges')
process.exit(1)
}
case 'EADDRINUSE': {
console.error(bind + ' is already in use')
logger.error(bind + ' is already in use')
process.exit(1)
}
default:
@@ -44,7 +44,7 @@ export function getListeningCb(server: http.Server, debug: Debugger) {
const bind = typeof addr === 'string' ? 'pipe ' + addr : 'port ' + addr.port
debug(`Listening on ${bind}`)
consoleInfo(`Listening on ${bind}`)
logger.info(`Listening on ${bind}`)
}
}
}