@@ -9,16 +9,35 @@ const test = require('node:test')
9
9
const assert = require ( 'node:assert' )
10
10
const path = require ( 'node:path' )
11
11
const cp = require ( 'node:child_process' )
12
+ const { Transform } = require ( 'stream' )
12
13
13
14
const tempRemoveListeners = require ( '../lib/temp-remove-listeners' )
15
+ function expectEntry ( entry , msg , level , component ) {
16
+ assert . equal ( entry . hostname , 'my-host' )
17
+ assert . equal ( entry . name , 'test-logger' )
18
+ assert . equal ( entry . pid , process . pid )
19
+ assert . equal ( entry . v , 0 )
20
+ assert . equal ( entry . level , level )
21
+ assert . equal ( entry . msg , msg )
22
+ if ( component ) {
23
+ assert . equal ( entry . component , component )
24
+ }
25
+ }
14
26
15
27
const Logger = require ( '../../lib/util/logger' )
28
+ function addResult ( ctx , data , encoding , done ) {
29
+ ctx . nr . results = ctx . nr . results . concat (
30
+ data . toString ( ) . split ( '\n' ) . filter ( Boolean ) . map ( JSON . parse )
31
+ )
32
+ done ( )
33
+ }
16
34
17
35
test . beforeEach ( ( ctx ) => {
18
36
ctx . nr = { }
19
37
ctx . nr . logger = new Logger ( {
20
38
name : 'newrelic' ,
21
39
level : 'trace' ,
40
+ hostname : 'my-host' ,
22
41
enabled : true ,
23
42
configured : true
24
43
} )
@@ -89,6 +108,41 @@ test('should flush logs when configured', (t) => {
89
108
assert . ok ( logger . logQueue . length === 0 , 'should have 0 logs in the queue' )
90
109
} )
91
110
111
+ test ( 'should properly format logs and child logs when flushing' , ( t , end ) => {
112
+ const { logger } = t . nr
113
+ t . nr . results = [ ]
114
+ logger . pipe ( new Transform ( {
115
+ transform : addResult . bind ( this , t )
116
+ } ) )
117
+ logger . options . configured = false
118
+ const child = logger . child ( { component : 'test-child' } )
119
+ logger . trace ( 'trace' )
120
+ logger . info ( '%d: %s' , 1 , 'a' )
121
+ logger . info ( '123' , '4' , '5' )
122
+ child . info ( 'child-info' )
123
+ const e = new Error ( )
124
+ e . name = 'Testing'
125
+ e . message = 'Test message'
126
+ child . trace ( e , 'Test error' )
127
+ logger . configure ( {
128
+ level : 'trace' ,
129
+ enabled : true ,
130
+ name : 'test-logger'
131
+ } )
132
+ child . error ( 'Test error %d %s' , 1 , 'sub' )
133
+ process . nextTick ( ( ) => {
134
+ const { results } = t . nr
135
+ assert . equal ( results . length , 6 )
136
+ expectEntry ( results [ 0 ] , '{"name":"Testing","message":"Test message"} Test error' , 10 , 'test-child' )
137
+ expectEntry ( results [ 1 ] , 'child-info' , 30 , 'test-child' )
138
+ expectEntry ( results [ 2 ] , '123 4 5' , 30 )
139
+ expectEntry ( results [ 3 ] , '1: a' , 30 )
140
+ expectEntry ( results [ 4 ] , 'trace' , 10 )
141
+ expectEntry ( results [ 5 ] , 'Test error 1 sub' , 50 )
142
+ end ( )
143
+ } )
144
+ } )
145
+
92
146
test ( 'should fallback to default logging config when config is invalid' , ( t , end ) => {
93
147
runTestFile ( 'disabled-with-invalid-config/disabled.js' , function ( error , message ) {
94
148
assert . equal ( error , undefined )
0 commit comments