Skip to content

Commit c1b01e4

Browse files
JoeeGriggcmraible
andauthored
Reshuffled logs to emit less info level logs (#604)
Reduced the number of excessive info logs to save on logging costs. --------- Co-authored-by: Chris Raible <chris@ghost.org>
1 parent e44ba56 commit c1b01e4

7 files changed

Lines changed: 73 additions & 23 deletions

File tree

src/plugins/logging.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,14 @@ async function loggingPlugin(fastify: FastifyInstance) {
2525
const rawRequestId = request.headers['x-request-id'];
2626
const requestId = Array.isArray(rawRequestId) ? rawRequestId[0] : rawRequestId;
2727

28+
// Extract site UUID if present
29+
const rawSiteUuid = request.headers['x-site-uuid'];
30+
const siteUuid = Array.isArray(rawSiteUuid) ? rawSiteUuid[0] : rawSiteUuid;
31+
2832
const childContext: Record<string, unknown> = {
2933
...traceContext,
30-
...(requestId && {requestId})
34+
...(requestId && {requestId}),
35+
...(siteUuid && {siteUuid})
3136
};
3237

3338
if (Object.keys(childContext).length > 0) {
@@ -61,7 +66,7 @@ async function loggingPlugin(fastify: FastifyInstance) {
6166
});
6267

6368
fastify.addHook('onResponse', async (request, reply) => {
64-
request.log.info({
69+
request.log.debug({
6570
event: 'RequestCompleted',
6671
httpRequest: {
6772
requestMethod: request.method,

src/services/batch-worker/BatchWorker.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -88,16 +88,11 @@ class BatchWorker {
8888
processedEvent: pageHitProcessed
8989
});
9090

91-
logger.info({
92-
event: 'WorkerProcessedMessage',
93-
messageId: message.id,
94-
eventId: pageHitProcessed.payload.event_id
95-
});
96-
9791
logger.debug({
98-
event: 'WorkerProcessedMessageDetails',
92+
event: 'WorkerProcessedMessage',
9993
messageId: message.id,
10094
messageData: this.getMessageData(message),
95+
eventId: pageHitProcessed.payload.event_id,
10196
pageHitProcessed
10297
});
10398

src/services/events/publisher.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class EventPublisher {
3333

3434
const messageId = await this.pubsub.topic(topic).publishMessage(message);
3535

36-
logger.info({
36+
logger.debug({
3737
event: 'EventPublishSuccessful',
3838
messageId,
3939
topic,

src/services/events/publisherUtils.ts

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,27 @@ import {publishEvent} from './publisher';
44
export const publishPageHitRaw = async (request: PageHitRequestType, payload: PageHitRaw): Promise<void> => {
55
const topic = process.env.PUBSUB_TOPIC_PAGE_HITS_RAW as string;
66
if (topic) {
7-
request.log.info({event: 'PublishingPageHitRawEvent', event_id: payload.payload.event_id});
8-
request.log.debug({event: 'PublishingPageHitRawEventPayload', payload});
9-
await publishEvent({
7+
const eventId = payload.payload.event_id ?? 'unknown';
8+
request.log.debug({
9+
event: 'PublishingPageHitRawEvent',
10+
event_id: eventId,
11+
payload
12+
});
13+
const messageId = await publishEvent({
1014
topic,
1115
payload,
1216
logger: request.log
1317
});
18+
request.log.info({
19+
event: 'PublishedPageHitRawEvent',
20+
message_id: messageId,
21+
event_id: eventId
22+
});
23+
request.log.debug({
24+
event: 'PublishedPageHitRawEventPayload',
25+
event_id: eventId,
26+
message_id: messageId,
27+
payload
28+
});
1429
}
1530
};

test/unit/plugins/logging.test.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,41 @@ describe('Logging Plugin', () => {
154154
});
155155
});
156156

157+
describe('x-site-uuid header', () => {
158+
it('should include siteUuid in IncomingRequest log when x-site-uuid header is provided', async () => {
159+
const siteUuid = '12345678-1234-1234-1234-123456789012';
160+
161+
await app.inject({
162+
method: 'GET',
163+
url: '/test',
164+
headers: {
165+
'x-site-uuid': siteUuid
166+
}
167+
});
168+
169+
const incomingRequestLog = parseLogs().find(
170+
log => log.event === 'IncomingRequest'
171+
);
172+
173+
expect(incomingRequestLog).toBeDefined();
174+
expect(incomingRequestLog?.siteUuid).toBe(siteUuid);
175+
});
176+
177+
it('should not include siteUuid in IncomingRequest log when x-site-uuid header is not provided', async () => {
178+
await app.inject({
179+
method: 'GET',
180+
url: '/test'
181+
});
182+
183+
const incomingRequestLog = parseLogs().find(
184+
log => log.event === 'IncomingRequest'
185+
);
186+
187+
expect(incomingRequestLog).toBeDefined();
188+
expect(incomingRequestLog).not.toHaveProperty('siteUuid');
189+
});
190+
});
191+
157192
describe('request body logging', () => {
158193
it('should log request body for requests over 600 KB', async () => {
159194
const largeBody = {

test/unit/services/batch-worker/batch-worker.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,8 @@ describe('BatchWorker', () => {
145145

146146
await (batchWorker as any).handleMessage(mockMessage);
147147

148-
// Should log info message with just event_id for successful processing
149-
expect(logger.info).toHaveBeenCalledWith(
148+
// Should log debug message with event details for successful processing
149+
expect(logger.debug).toHaveBeenCalledWith(
150150
expect.objectContaining({
151151
event: 'WorkerProcessedMessage',
152152
messageId: mockMessage.id,
@@ -157,7 +157,7 @@ describe('BatchWorker', () => {
157157
// Should log debug message with full payload
158158
expect(logger.debug).toHaveBeenCalledWith(
159159
expect.objectContaining({
160-
event: 'WorkerProcessedMessageDetails',
160+
event: 'WorkerProcessedMessage',
161161
messageId: mockMessage.id,
162162
messageData: validPageHitRawData,
163163
pageHitProcessed: expect.objectContaining({

test/unit/services/events/publisherUtils.test.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ describe('publisherUtils', () => {
3232
});
3333

3434
describe('publishPageHitRaw', () => {
35-
it('should log info message with only event_id on successful publish', async () => {
35+
it('should log debug payload details on successful publish', async () => {
3636
const payload = {
3737
payload: {
3838
event_id: 'test-event-123',
@@ -44,12 +44,12 @@ describe('publisherUtils', () => {
4444

4545
await publishPageHitRaw(mockRequest, payload);
4646

47-
expect(mockRequest.log.info).toHaveBeenCalledWith(
48-
{event: 'PublishingPageHitRawEvent', event_id: 'test-event-123'}
49-
);
50-
expect(mockRequest.log.info).not.toHaveBeenCalledWith(
51-
expect.objectContaining({payload: expect.anything()}),
52-
expect.anything()
47+
expect(mockRequest.log.debug).toHaveBeenCalledWith(
48+
{
49+
event: 'PublishingPageHitRawEvent',
50+
event_id: 'test-event-123',
51+
payload
52+
}
5353
);
5454
});
5555

0 commit comments

Comments
 (0)