11'use strict' ;
22
3- require ( '../common' ) ;
3+ const common = require ( '../common' ) ;
44
55const assert = require ( 'node:assert' ) ;
6- const common = require ( '../common' ) ;
76const { createLogger, Logger, LogConsumer, JSONConsumer, LEVELS , channels } = require ( 'node:logger' ) ;
87const fs = require ( 'node:fs' ) ;
98const os = require ( 'node:os' ) ;
@@ -111,14 +110,16 @@ const path = require('node:path');
111110 // Flush synchronously and read the output
112111 consumer . flushSync ( ) ;
113112 consumer . end ( ( ) => {
114- const output = fs . readFileSync ( tmpfile , 'utf8' ) . trim ( ) ;
115- assert . notStrictEqual ( output , '' ) ;
116- const parsed = JSON . parse ( output ) ;
117- assert . strictEqual ( parsed . level , 'info' ) ;
118- assert . strictEqual ( parsed . msg , 'test message' ) ;
119- assert . strictEqual ( parsed . userId , 123 ) ;
120- assert . strictEqual ( typeof parsed . time , 'number' ) ;
121- fs . unlinkSync ( tmpfile ) ;
113+ common . mustSucceed ( ( ) => {
114+ const output = fs . readFileSync ( tmpfile , 'utf8' ) . trim ( ) ;
115+ assert . notStrictEqual ( output , '' ) ;
116+ const parsed = JSON . parse ( output ) ;
117+ assert . strictEqual ( parsed . level , 'info' ) ;
118+ assert . strictEqual ( parsed . msg , 'test message' ) ;
119+ assert . strictEqual ( parsed . userId , 123 ) ;
120+ assert . strictEqual ( typeof parsed . time , 'number' ) ;
121+ fs . unlinkSync ( tmpfile ) ;
122+ } ) ( ) ;
122123 } ) ;
123124}
124125
@@ -137,13 +138,15 @@ const path = require('node:path');
137138
138139 consumer . flushSync ( ) ;
139140 consumer . end ( ( ) => {
140- const output = fs . readFileSync ( tmpfile , 'utf8' ) . trim ( ) ;
141- assert . notStrictEqual ( output , '' ) ;
142- const parsed = JSON . parse ( output ) ;
143- assert . strictEqual ( parsed . hostname , 'test-host' ) ;
144- assert . strictEqual ( parsed . pid , 12345 ) ;
145- assert . strictEqual ( parsed . msg , 'with fields' ) ;
146- fs . unlinkSync ( tmpfile ) ;
141+ common . mustSucceed ( ( ) => {
142+ const output = fs . readFileSync ( tmpfile , 'utf8' ) . trim ( ) ;
143+ assert . notStrictEqual ( output , '' ) ;
144+ const parsed = JSON . parse ( output ) ;
145+ assert . strictEqual ( parsed . hostname , 'test-host' ) ;
146+ assert . strictEqual ( parsed . pid , 12345 ) ;
147+ assert . strictEqual ( parsed . msg , 'with fields' ) ;
148+ fs . unlinkSync ( tmpfile ) ;
149+ } ) ( ) ;
147150 } ) ;
148151}
149152
@@ -162,13 +165,15 @@ const path = require('node:path');
162165
163166 consumer . flushSync ( ) ;
164167 consumer . end ( ( ) => {
165- const output = fs . readFileSync ( tmpfile , 'utf8' ) . trim ( ) ;
166- assert . notStrictEqual ( output , '' ) ;
167- const parsed = JSON . parse ( output ) ;
168- assert . strictEqual ( parsed . requestId , 'xyz-789' ) ;
169- assert . strictEqual ( parsed . action , 'create' ) ;
170- assert . strictEqual ( parsed . msg , 'child log' ) ;
171- fs . unlinkSync ( tmpfile ) ;
168+ common . mustSucceed ( ( ) => {
169+ const output = fs . readFileSync ( tmpfile , 'utf8' ) . trim ( ) ;
170+ assert . notStrictEqual ( output , '' ) ;
171+ const parsed = JSON . parse ( output ) ;
172+ assert . strictEqual ( parsed . requestId , 'xyz-789' ) ;
173+ assert . strictEqual ( parsed . action , 'create' ) ;
174+ assert . strictEqual ( parsed . msg , 'child log' ) ;
175+ fs . unlinkSync ( tmpfile ) ;
176+ } ) ( ) ;
172177 } ) ;
173178}
174179
@@ -239,12 +244,14 @@ const path = require('node:path');
239244
240245 consumer . flushSync ( ) ;
241246 consumer . end ( ( ) => {
242- const output = fs . readFileSync ( tmpfile , 'utf8' ) . trim ( ) ;
243- assert . notStrictEqual ( output , '' ) ;
244- const parsed = JSON . parse ( output ) ;
245- assert . strictEqual ( parsed . msg , 'simple message' ) ;
246- assert . strictEqual ( parsed . level , 'info' ) ;
247- fs . unlinkSync ( tmpfile ) ;
247+ common . mustSucceed ( ( ) => {
248+ const output = fs . readFileSync ( tmpfile , 'utf8' ) . trim ( ) ;
249+ assert . notStrictEqual ( output , '' ) ;
250+ const parsed = JSON . parse ( output ) ;
251+ assert . strictEqual ( parsed . msg , 'simple message' ) ;
252+ assert . strictEqual ( parsed . level , 'info' ) ;
253+ fs . unlinkSync ( tmpfile ) ;
254+ } ) ( ) ;
248255 } ) ;
249256}
250257
@@ -262,13 +269,15 @@ const path = require('node:path');
262269
263270 consumer . flushSync ( ) ;
264271 consumer . end ( ( ) => {
265- const output = fs . readFileSync ( tmpfile , 'utf8' ) . trim ( ) ;
266- assert . notStrictEqual ( output , '' ) ;
267- const parsed = JSON . parse ( output ) ;
268- assert . strictEqual ( parsed . msg , 'user login' ) ;
269- assert . strictEqual ( parsed . userId , 123 ) ;
270- assert . strictEqual ( parsed . ip , '127.0.0.1' ) ;
271- fs . unlinkSync ( tmpfile ) ;
272+ common . mustSucceed ( ( ) => {
273+ const output = fs . readFileSync ( tmpfile , 'utf8' ) . trim ( ) ;
274+ assert . notStrictEqual ( output , '' ) ;
275+ const parsed = JSON . parse ( output ) ;
276+ assert . strictEqual ( parsed . msg , 'user login' ) ;
277+ assert . strictEqual ( parsed . userId , 123 ) ;
278+ assert . strictEqual ( parsed . ip , '127.0.0.1' ) ;
279+ fs . unlinkSync ( tmpfile ) ;
280+ } ) ( ) ;
272281 } ) ;
273282}
274283
@@ -288,16 +297,18 @@ const path = require('node:path');
288297
289298 consumer . flushSync ( ) ;
290299 consumer . end ( ( ) => {
291- const output = fs . readFileSync ( tmpfile , 'utf8' ) . trim ( ) ;
292- assert . notStrictEqual ( output , '' ) ;
293- const parsed = JSON . parse ( output ) ;
294- // Error should be serialized with stack trace
295- assert . strictEqual ( parsed . msg , 'operation failed' ) ;
296- assert . strictEqual ( typeof parsed . err , 'object' ) ;
297- assert . strictEqual ( parsed . err . message , 'test error' ) ;
298- assert . strictEqual ( parsed . err . code , 'TEST_ERROR' ) ;
299- assert ( parsed . err . stack ) ;
300- fs . unlinkSync ( tmpfile ) ;
300+ common . mustSucceed ( ( ) => {
301+ const output = fs . readFileSync ( tmpfile , 'utf8' ) . trim ( ) ;
302+ assert . notStrictEqual ( output , '' ) ;
303+ const parsed = JSON . parse ( output ) ;
304+ // Error should be serialized with stack trace
305+ assert . strictEqual ( parsed . msg , 'operation failed' ) ;
306+ assert . strictEqual ( typeof parsed . err , 'object' ) ;
307+ assert . strictEqual ( parsed . err . message , 'test error' ) ;
308+ assert . strictEqual ( parsed . err . code , 'TEST_ERROR' ) ;
309+ assert ( parsed . err . stack ) ;
310+ fs . unlinkSync ( tmpfile ) ;
311+ } ) ( ) ;
301312 } ) ;
302313}
303314
@@ -316,13 +327,15 @@ const path = require('node:path');
316327
317328 consumer . flushSync ( ) ;
318329 consumer . end ( ( ) => {
319- const output = fs . readFileSync ( tmpfile , 'utf8' ) . trim ( ) ;
320- assert . notStrictEqual ( output , '' ) ;
321- const parsed = JSON . parse ( output ) ;
322- assert . strictEqual ( parsed . msg , 'boom' ) ; // message from error
323- assert . strictEqual ( typeof parsed . err , 'object' ) ;
324- assert ( parsed . err . stack ) ;
325- fs . unlinkSync ( tmpfile ) ;
330+ common . mustSucceed ( ( ) => {
331+ const output = fs . readFileSync ( tmpfile , 'utf8' ) . trim ( ) ;
332+ assert . notStrictEqual ( output , '' ) ;
333+ const parsed = JSON . parse ( output ) ;
334+ assert . strictEqual ( parsed . msg , 'boom' ) ; // message from error
335+ assert . strictEqual ( typeof parsed . err , 'object' ) ;
336+ assert ( parsed . err . stack ) ;
337+ fs . unlinkSync ( tmpfile ) ;
338+ } ) ( ) ;
326339 } ) ;
327340}
328341
@@ -342,15 +355,17 @@ const path = require('node:path');
342355
343356 consumer . flushSync ( ) ;
344357 consumer . end ( ( ) => {
345- const output = fs . readFileSync ( tmpfile , 'utf8' ) . trim ( ) ;
346- assert . notStrictEqual ( output , '' ) ;
347- const parsed = JSON . parse ( output ) ;
348- // Merge order: consumer fields < bindings < log fields
349- assert . strictEqual ( parsed . service , 'api' ) ;
350- assert . strictEqual ( parsed . requestId , '123' ) ;
351- assert . strictEqual ( parsed . duration , 150 ) ;
352- assert . strictEqual ( parsed . msg , 'request processed' ) ;
353- fs . unlinkSync ( tmpfile ) ;
358+ common . mustSucceed ( ( ) => {
359+ const output = fs . readFileSync ( tmpfile , 'utf8' ) . trim ( ) ;
360+ assert . notStrictEqual ( output , '' ) ;
361+ const parsed = JSON . parse ( output ) ;
362+ // Merge order: consumer fields < bindings < log fields
363+ assert . strictEqual ( parsed . service , 'api' ) ;
364+ assert . strictEqual ( parsed . requestId , '123' ) ;
365+ assert . strictEqual ( parsed . duration , 150 ) ;
366+ assert . strictEqual ( parsed . msg , 'request processed' ) ;
367+ fs . unlinkSync ( tmpfile ) ;
368+ } ) ( ) ;
354369 } ) ;
355370}
356371
@@ -370,13 +385,15 @@ const path = require('node:path');
370385
371386 consumer . flushSync ( ) ;
372387 consumer . end ( ( ) => {
373- const output = fs . readFileSync ( tmpfile , 'utf8' ) . trim ( ) ;
374- assert . notStrictEqual ( output , '' ) ;
375- const parsed = JSON . parse ( output ) ;
376- // Log fields should override everything
377- assert . strictEqual ( parsed . env , 'production' ) ;
378- assert . strictEqual ( parsed . version , '1.0' ) ;
379- fs . unlinkSync ( tmpfile ) ;
388+ common . mustSucceed ( ( ) => {
389+ const output = fs . readFileSync ( tmpfile , 'utf8' ) . trim ( ) ;
390+ assert . notStrictEqual ( output , '' ) ;
391+ const parsed = JSON . parse ( output ) ;
392+ // Log fields should override everything
393+ assert . strictEqual ( parsed . env , 'production' ) ;
394+ assert . strictEqual ( parsed . version , '1.0' ) ;
395+ fs . unlinkSync ( tmpfile ) ;
396+ } ) ( ) ;
380397 } ) ;
381398}
382399
@@ -418,20 +435,22 @@ const path = require('node:path');
418435 const output2 = fs . readFileSync ( tmpfile2 , 'utf8' ) ;
419436 const lines2 = output2 . trim ( ) . split ( '\n' ) . filter ( Boolean ) ;
420437
421- // Consumer1 dosya formatı satır başına log yazıyorsa 4 olmalı, değilse bu kontrolü güncelle.
422- assert . strictEqual ( lines1 . length , 4 ) ;
423- assert . strictEqual ( JSON . parse ( lines1 [ 0 ] ) . level , 'debug' ) ;
424- assert . strictEqual ( JSON . parse ( lines1 [ 1 ] ) . level , 'info' ) ;
425- assert . strictEqual ( JSON . parse ( lines1 [ 2 ] ) . level , 'warn' ) ;
426- assert . strictEqual ( JSON . parse ( lines1 [ 3 ] ) . level , 'error' ) ;
427-
428- // Consumer2 dosya formatı satır başına log yazıyorsa 2 olmalı, değilse bu kontrolü güncelle.
429- assert . strictEqual ( lines2 . length , 2 ) ;
430- assert . strictEqual ( JSON . parse ( lines2 [ 0 ] ) . level , 'warn' ) ;
431- assert . strictEqual ( JSON . parse ( lines2 [ 1 ] ) . level , 'error' ) ;
432-
433- fs . unlinkSync ( tmpfile1 ) ;
434- fs . unlinkSync ( tmpfile2 ) ;
438+ // Consumer1 should have 4 log lines if each log is written per line.
439+ common . mustSucceed ( ( ) => {
440+ assert . strictEqual ( lines1 . length , 4 ) ;
441+ assert . strictEqual ( JSON . parse ( lines1 [ 0 ] ) . level , 'debug' ) ;
442+ assert . strictEqual ( JSON . parse ( lines1 [ 1 ] ) . level , 'info' ) ;
443+ assert . strictEqual ( JSON . parse ( lines1 [ 2 ] ) . level , 'warn' ) ;
444+ assert . strictEqual ( JSON . parse ( lines1 [ 3 ] ) . level , 'error' ) ;
445+
446+ // Consumer2 should have 2 log lines if each log is written per line.
447+ assert . strictEqual ( lines2 . length , 2 ) ;
448+ assert . strictEqual ( JSON . parse ( lines2 [ 0 ] ) . level , 'warn' ) ;
449+ assert . strictEqual ( JSON . parse ( lines2 [ 1 ] ) . level , 'error' ) ;
450+
451+ fs . unlinkSync ( tmpfile1 ) ;
452+ fs . unlinkSync ( tmpfile2 ) ;
453+ } ) ( ) ;
435454 }
436455 }
437456
@@ -471,11 +490,13 @@ const path = require('node:path');
471490
472491 logger . error ( { msg : 'Multiple errors' , err, error } ) ;
473492
474- assert . strictEqual ( logs . length , 1 ) ;
475- assert . strictEqual ( logs [ 0 ] . err . message , 'Error 1' ) ;
476- assert . strictEqual ( logs [ 0 ] . error . message , 'Error 2' ) ;
477- assert . ok ( logs [ 0 ] . err . stack ) ;
478- assert . ok ( logs [ 0 ] . error . stack ) ;
493+ common . mustSucceed ( ( ) => {
494+ assert . strictEqual ( logs . length , 1 ) ;
495+ assert . strictEqual ( logs [ 0 ] . err . message , 'Error 1' ) ;
496+ assert . strictEqual ( logs [ 0 ] . error . message , 'Error 2' ) ;
497+ assert . ok ( logs [ 0 ] . err . stack ) ;
498+ assert . ok ( logs [ 0 ] . error . stack ) ;
499+ } ) ( ) ;
479500}
480501
481502// Test: 'error' field serialization
@@ -498,8 +519,10 @@ const path = require('node:path');
498519
499520 logger . error ( { msg : 'Operation failed' , error } ) ;
500521
501- assert . strictEqual ( logs . length , 1 ) ;
502- assert . strictEqual ( logs [ 0 ] . error . message , 'Test error' ) ;
503- assert . strictEqual ( logs [ 0 ] . error . code , 'TEST_CODE' ) ;
504- assert . ok ( logs [ 0 ] . error . stack ) ;
522+ common . mustSucceed ( ( ) => {
523+ assert . strictEqual ( logs . length , 1 ) ;
524+ assert . strictEqual ( logs [ 0 ] . error . message , 'Test error' ) ;
525+ assert . strictEqual ( logs [ 0 ] . error . code , 'TEST_CODE' ) ;
526+ assert . ok ( logs [ 0 ] . error . stack ) ;
527+ } ) ( ) ;
505528}
0 commit comments