Added logging system
This commit is contained in:
@@ -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()
|
||||
|
||||
51
server/src/helpers/logger.ts
Normal file
51
server/src/helpers/logger.ts
Normal 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'))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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}`)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user