Skip to content

Commit 74ff7dd

Browse files
committed
Improve log system on backend-javascript
1 parent 8c6558a commit 74ff7dd

File tree

9 files changed

+91
-30
lines changed

9 files changed

+91
-30
lines changed

backend-javascript/package-lock.json

Lines changed: 46 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

backend-javascript/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@
8484
"swagger-jsdoc": "6.2.8",
8585
"swagger-ui-express": "5.0.1",
8686
"winston": "3.17.0",
87+
"winston-daily-rotate-file": "^5.0.0",
8788
"zod": "3.25.75"
8889
}
8990
}

backend-javascript/src/app.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import responseHandler from './middlewares/response/response-handler.js';
1212
import errorHandler from './middlewares/error/error-handler.js';
1313

1414
import requestLogger from './infrastructure/logger/request-logger.js';
15-
import errorLogger from './infrastructure/logger/error-logger.js';
1615

1716
import fakeAuth from './middlewares/auth/fake-auth.js';
1817

@@ -35,10 +34,10 @@ if (['development', 'test'].includes(appConfig.app.nodeEnv)) {
3534
app.use(fakeAuth(appConfig.app.fakeUser));
3635
}
3736

38-
app.use(healthRoutes);
39-
4037
app.use(requestLogger);
4138

39+
app.use(healthRoutes);
40+
4241
app.use(versionRoutes);
4342
app.use(swaggerRoutes);
4443
app.use(appRoutes);
@@ -49,6 +48,5 @@ app.use(notFoundHandler);
4948
app.use(responseHandler);
5049

5150
app.use(errorHandler);
52-
app.use(errorLogger);
5351

5452
export default app;

backend-javascript/src/infrastructure/logger/error-logger.js

Lines changed: 0 additions & 13 deletions
This file was deleted.

backend-javascript/src/infrastructure/logger/logger.js

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,30 @@
11
import { createLogger, transports, format } from 'winston';
2+
import DailyRotateFile from 'winston-daily-rotate-file';
23

34
const logger = createLogger({
4-
level: process.env.LOG_LEVEL || 'info',
5+
level: process.env.LOG_LEVEL || 'warn',
56
format: format.combine(
67
format.timestamp(),
78
format.errors({ stack: true }),
89
format.splat(),
910
format.json(),
1011
),
1112
transports: [
12-
new transports.File({ filename: 'logs/error.log', level: 'error' }),
13-
new transports.File({ filename: 'logs/combined.log' }),
13+
new DailyRotateFile({
14+
filename: 'logs/error-%DATE%.log',
15+
datePattern: 'YYYY-MM-DD',
16+
level: 'error',
17+
zippedArchive: true,
18+
maxSize: '5m',
19+
maxFiles: '120d',
20+
}),
21+
new DailyRotateFile({
22+
filename: 'logs/combined-%DATE%.log',
23+
datePattern: 'YYYY-MM-DD',
24+
zippedArchive: true,
25+
maxSize: '5m',
26+
maxFiles: '120d',
27+
}),
1428
],
1529
});
1630

backend-javascript/src/infrastructure/logger/request-logger.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
import logger from './logger.js';
22

33
const requestLogger = (req, res, next) => {
4-
logger.info(`[${req.method}] ${req.originalUrl}`);
4+
logger.info(`[${req.method}] ${req.originalUrl}`, {
5+
method: req.method,
6+
route: req.originalUrl,
7+
});
58
next();
69
};
710

backend-javascript/src/middlewares/error/error-handler.js

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,28 @@ function errorHandler(err, req, res, next) {
1010
timestamp: new Date().toISOString(),
1111
};
1212

13-
logger.error(`[ERROR] ${statusCode}: ${message}`);
14-
if (context) {
15-
logger.error(`[CONTEXT] ${context}`);
13+
const logMessage = `[${req.method}] ${req.originalUrl} - ${statusCode} ${message}`;
14+
const logData = {
15+
method: req.method,
16+
route: req.originalUrl,
17+
statusCode: statusCode,
18+
message: message,
19+
context: context,
20+
details: details,
21+
stack: err.stack,
22+
};
23+
24+
if (statusCode >= 500) {
25+
logger.error(logMessage, logData);
26+
} else {
27+
logger.warn(logMessage, logData);
1628
}
1729

1830
res.status(statusCode).json({
1931
success: false,
20-
error: {
21-
message,
22-
context,
23-
details,
24-
},
32+
error: { message, context, details },
2533
});
2634
}
2735

2836
export default errorHandler;
37+

backend-javascript/src/middlewares/response/response-handler.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ function responseHandler(req, res, next) {
55

66
const statusCode = res.locals.statusCode || 200;
77
const payload = res.locals.data || null;
8-
const response = { success: true };
8+
const success = statusCode >= 200 && statusCode < 300;
9+
10+
const response = { success };
911

1012
if (payload && payload.metadata && payload.data) {
1113
response.metadata = payload.metadata;

backend-javascript/src/modules/person/person.controller.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ class Controller {
1818

1919
getItems = async (req, res, next) => {
2020
try {
21+
2122
const result = await this.service.getItems(req.query);
2223
res.locals = { data: result, statusCode: HTTP_STATUS.OK };
2324

0 commit comments

Comments
 (0)