Skip to content

Commit 475d145

Browse files
committed
refactor: use standard Pino API for logging
- Remove messageKey config from logger (fixes pino-pretty display) - Convert all logging to standard Pino API: log.info({data}, 'message') - Update tests to match new logging behavior - ECS format automatically converts msg -> message in production - Cleaner, more readable logs matching Fastify documentation - All 32 tests passing (25 unit + 7 integration)
1 parent 0dad291 commit 475d145

File tree

3 files changed

+14
-26
lines changed

3 files changed

+14
-26
lines changed

src/server.js

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,8 @@ server.addHook('onRequest', (request, reply, done) => {
8484
request.log.info({
8585
reqId: request.id,
8686
correlationId: request.correlationId,
87-
message: 'Request size',
8887
size: `${request.headers['content-length']} bytes`
89-
});
88+
}, 'Request size');
9089
}
9190
done();
9291
});
@@ -108,32 +107,29 @@ server.addHook('onRequest', (request, reply, done) => {
108107
request.log.error({
109108
reqId: request.id,
110109
correlationId: request.correlationId,
111-
message: "Route not found",
112110
url: sanitizedUrl,
113111
method: request.method,
114112
ip: request.ips
115-
});
113+
}, "Route not found");
116114
reply.code(HTTP_STATUS_CODES.NOT_FOUND);
117115
return reply.send({error: 'Not Found'});
118116
} else if (!isAuthenticated(request)) {
119117
request.log.warn({
120118
reqId: request.id,
121119
correlationId: request.correlationId,
122-
message: "Unauthorized access attempt",
123120
url: sanitizedUrl,
124121
method: request.method,
125122
ip: request.ips
126-
});
123+
}, "Unauthorized access attempt");
127124
reply.code(HTTP_STATUS_CODES.UNAUTHORIZED);
128125
return reply.send({error: 'Unauthorized'});
129126
}
130127
request.log.info({
131128
reqId: request.id,
132129
correlationId: request.correlationId,
133-
message: "Request authenticated",
134130
url: sanitizedUrl,
135131
method: request.method
136-
});
132+
}, "Request authenticated");
137133
done();
138134
});
139135

@@ -142,27 +138,24 @@ server.addHook('onRequest', (request, reply, done) => {
142138
request.log.info({
143139
reqId: request.id,
144140
correlationId: request.correlationId,
145-
message: 'Incoming request',
146141
url: request.url,
147142
method: request.method,
148143
ip: request.ips
149-
});
144+
}, 'Incoming request');
150145
done();
151146
});
152147

153148
// Response logging hook with correlation ID
154149
server.addHook('onResponse', (request, reply, done) => {
155150
const duration = Date.now() - request.startTime;
156-
const logData = {
151+
request.log.info({
157152
reqId: request.id,
158153
correlationId: request.correlationId,
159-
message: 'Request completed',
160154
url: request.url,
161155
method: request.method,
162156
statusCode: reply.statusCode,
163157
duration: `${duration}ms`
164-
};
165-
request.log.info(logData);
158+
}, 'Request completed');
166159
done();
167160
});
168161

@@ -208,7 +201,7 @@ server.get('/health', async (request, reply) => {
208201

209202
reply.send(health);
210203
} catch (error) {
211-
request.log.error({message: 'Health check failed', error});
204+
request.log.error(error, 'Health check failed');
212205
reply.code(503).send({
213206
status: 'ERROR',
214207
timestamp: new Date().toISOString(),

src/utils/logger.js

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,13 @@ export function createLogger() {
2222
if (isDevelopment) {
2323
// Pretty logs for development
2424
return pino({
25-
messageKey: 'message',
2625
transport: {
2726
target: 'pino-pretty',
2827
options: {
2928
colorize: true,
3029
translateTime: 'HH:MM:ss Z',
3130
ignore: 'pid,hostname',
32-
singleLine: false,
33-
messageKey: 'message'
31+
singleLine: false
3432
}
3533
}
3634
});
@@ -55,15 +53,13 @@ export function createFastifyLogger() {
5553
if (isDevelopment) {
5654
// Pretty logs for development
5755
return {
58-
messageKey: 'message',
5956
transport: {
6057
target: 'pino-pretty',
6158
options: {
6259
colorize: true,
6360
translateTime: 'HH:MM:ss',
6461
ignore: 'pid,hostname',
65-
singleLine: false,
66-
messageKey: 'message'
62+
singleLine: false
6763
}
6864
}
6965
};

test/unit/utils/logger-test.spec.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,10 @@ describe('unit Tests for logger', function () {
6262
const loggerConfig = createFastifyLogger();
6363

6464
expect(loggerConfig).to.exist;
65-
expect(loggerConfig.messageKey).to.equal('message');
6665
expect(loggerConfig.transport).to.exist;
6766
expect(loggerConfig.transport.target).to.equal('pino-pretty');
6867
expect(loggerConfig.transport.options).to.exist;
6968
expect(loggerConfig.transport.options.colorize).to.equal(true);
70-
expect(loggerConfig.transport.options.messageKey).to.equal('message');
7169
});
7270

7371
it('should create production Fastify logger config with ECS format', function () {
@@ -88,12 +86,13 @@ describe('unit Tests for logger', function () {
8886
});
8987

9088
describe('logger message field consistency', function () {
91-
it('development logger should use message field', function () {
89+
it('development logger should use standard Pino API', function () {
9290
delete process.env.NODE_ENV;
9391
const loggerConfig = createFastifyLogger();
9492

95-
expect(loggerConfig.messageKey).to.equal('message');
96-
expect(loggerConfig.transport.options.messageKey).to.equal('message');
93+
// Standard Pino API - no messageKey override needed
94+
expect(loggerConfig.transport).to.exist;
95+
expect(loggerConfig.transport.target).to.equal('pino-pretty');
9796
});
9897

9998
it('should maintain ECS compliance in production', function () {

0 commit comments

Comments
 (0)