replace console.log with winston logger

This commit is contained in:
2023-08-05 07:04:44 +02:00
parent bbf41f41a9
commit 74f728ef9a
8 changed files with 278 additions and 27 deletions

View File

@@ -3,6 +3,7 @@ import morgan from 'morgan';
import nodesched from 'node-schedule';
import appConfig from './config';
import logger from './logger';
import router from './router';
import wxService from './services/wx.service';
@@ -27,7 +28,7 @@ if (!config.disableDefaultApiEndpoint) {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
app.use((err, req: Request, res: Response, next: NextFunction) => {
console.log('err', err);
logger.error('%o', err);
// 500
res.status(500).json({ msg: 'an error occurred' });
@@ -37,20 +38,18 @@ nodesched.scheduleJob('regenerate data', '*/30 * * * *', wxService.wrappedGenera
wxService.wrappedGenerateData();
const server = app.listen(config.port, () => {
console.log(
`application is listening on port ${config.port}`,
);
logger.info('application is listening on port %s', config.port);
});
function processShutdown(signal: string) {
console.log(`${signal} signal received. Shutting down.`);
logger.warn('%s signal received. Shutting down.', signal);
server.close((err) => {
if (err) {
console.error(`Failed to shut down server gracefully: ${err}`);
logger.error('Failed to shut down server gracefully: %o', err);
process.exit(1);
}
console.log('Server closed');
logger.info('Server closed');
process.exit(0);
});
}

View File

@@ -1,11 +1,4 @@
export interface Config {
port: number;
apiBasePath: string;
disableDefaultApiEndpoint: boolean;
trustProxy: string | boolean;
}
export default function appConfig(): Config {
export default function appConfig() {
const {
PORT,
BASE_PATH,
@@ -21,8 +14,15 @@ export default function appConfig(): Config {
return {
port: Number(PORT ?? 3000),
apiBasePath: BASE_PATH ?? '',
trustProxy,
disableDefaultApiEndpoint: DISABLE_DEFAULT_API_ENDPOINT == 'true',
logging: {
levelConsole: process.env.LOG_LEVEL_CONSOLE || 'http',
levelFile: process.env.LOG_LEVEL_FILE || 'info',
},
};
}

View File

@@ -5,6 +5,7 @@ import wxService from '../services/wx.service';
export async function getRegionWx(req: express.Request, res: express.Response, next: express.NextFunction) {
try {
const { region } = req.params;
res.json(wxService.getWx(region));
} catch (e) {
next(e);

42
src/backend/logger.ts Normal file
View File

@@ -0,0 +1,42 @@
import winston from 'winston';
import getConfig from './config';
const { logging } = getConfig();
const transports = [
new winston.transports.File({
filename: 'app.log',
level: logging.levelFile,
}),
new winston.transports.Console({
level: logging.levelConsole,
format: winston.format.colorize({ all: true }),
}),
];
const logger = winston.createLogger({
exitOnError: false,
format: winston.format.combine(
winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
winston.format.splat(),
winston.format.printf(info => `${info.timestamp} ${info.level}: ${info.message}`),
),
transports,
});
winston.addColors({
error: 'brightRed',
warn: 'yellow',
info: 'green',
http: 'magenta',
verbose: 'brightBlue',
debug: 'brightCyan',
silly: 'gray',
});
process.on('warning', e => logger.warn('%o', e));
process.on('uncaughtException', e => logger.error('%o', e));
process.on('unhandledRejection', e => logger.error('%o', e));
export default logger;

View File

@@ -2,7 +2,6 @@ import fs from 'fs';
import { WxConfig } from '@/shared/types/config.types';
export function getConfig(): WxConfig {
const data = JSON.parse(fs.readFileSync('/opt/wx-config.json').toString());

View File

@@ -1,5 +1,7 @@
import axios from 'axios';
import logger from '../logger';
import regionsService from './regions.service';
import { WxFix } from '@/shared/types/config.types';
@@ -98,7 +100,7 @@ export async function generateData() {
}
export function wrappedGenerateData() {
generateData().catch((...params) => console.error(...params));
generateData().catch((...params) => logger.error('%o', params));
}
export function getWx(region: string): WxData | null {