11import { noop } from 'packages/helpers' ;
22
33const productionLevels = [ 'info' , 'warn' , 'error' , 'fatal' ] ;
4- const devLevels = [ 'trace' , 'debug' , ' warn', 'error' , 'fatal' ] ;
4+ const devLevels = [ 'warn' , 'error' , 'fatal' ] ;
55const onlyDevLevels = [ 'trace' , 'debug' ] ;
66
77const consoleLevels = {
@@ -59,11 +59,13 @@ describe('infra/logger', () => {
5959
6060 describe ( 'Development (via console)' , ( ) => {
6161 beforeAll ( ( ) => {
62+ vi . stubEnv ( 'NODE_ENV' , 'development' ) ;
6263 vi . stubEnv ( 'VERCEL_ENV' , '' ) ;
6364 vi . stubEnv ( 'AXIOM_DATASET' , '' ) ;
6465 } ) ;
6566
6667 afterAll ( ( ) => {
68+ vi . stubEnv ( 'NODE_ENV' , 'test' ) ;
6769 vi . stubEnv ( 'AXIOM_DATASET' , dataset ) ;
6870 } ) ;
6971
@@ -87,6 +89,44 @@ describe('infra/logger', () => {
8789 expect ( logger . flush ) . not . toThrow ( ) ;
8890 } ) ;
8991
92+ it ( 'should expose pino-compatible methods' , ( ) => {
93+ expect ( typeof logger . child ) . toBe ( 'function' ) ;
94+ expect ( typeof logger . bindings ) . toBe ( 'function' ) ;
95+ expect ( typeof logger . setBindings ) . toBe ( 'function' ) ;
96+ expect ( typeof logger . isLevelEnabled ) . toBe ( 'function' ) ;
97+ } ) ;
98+
99+ it ( 'should merge child bindings and write to console' , ( ) => {
100+ const childLogger = logger . child ( { requestId : 'req-1' } ) ;
101+
102+ childLogger . warn ( 'logger.warn' ) ;
103+ childLogger . error ( { message : 'logger.error' } ) ;
104+
105+ expect ( consoleSpy . warn ) . toHaveBeenCalledWith ( 'logger.warn' , { requestId : 'req-1' } ) ;
106+ expect ( consoleSpy . error ) . toHaveBeenCalledWith ( { message : 'logger.error' , requestId : 'req-1' } ) ;
107+ } ) ;
108+
109+ it ( 'should set and get bindings' , ( ) => {
110+ logger . setBindings ( { session : 'abc' } ) ;
111+
112+ expect ( logger . bindings ( ) ) . toStrictEqual ( { session : 'abc' } ) ;
113+ } ) ;
114+
115+ it ( 'should keep info disabled by default' , ( ) => {
116+ logger . info ( 'logger.info' ) ;
117+
118+ expect ( logger . isLevelEnabled ( 'info' ) ) . toBe ( true ) ;
119+ expect ( consoleSpy . info ) . not . toHaveBeenCalled ( ) ;
120+ } ) ;
121+
122+ it ( 'should keep debug disabled by default' , ( ) => {
123+ expect ( logger . isLevelEnabled ( 'debug' ) ) . toBe ( false ) ;
124+ } ) ;
125+
126+ it ( 'should keep trace disabled by default' , ( ) => {
127+ expect ( logger . isLevelEnabled ( 'trace' ) ) . toBe ( false ) ;
128+ } ) ;
129+
90130 describe ( 'with "LOG_LEVEL" set to "info"' , ( ) => {
91131 beforeAll ( ( ) => {
92132 vi . stubEnv ( 'LOG_LEVEL' , 'info' ) ;
@@ -122,7 +162,7 @@ describe('infra/logger', () => {
122162 productionLevels . forEach ( ( level ) => {
123163 expect ( stdoutSpy ) . toHaveBeenCalledWith (
124164 expect . stringMatching (
125- new RegExp ( `{"level":\\d+,"time":\\d+,"environment":"test ","msg":"logger.${ level } "}` ) ,
165+ new RegExp ( `{"level":\\d+,"time":\\d+,"environment":"development ","msg":"logger.${ level } "}` ) ,
126166 ) ,
127167 ) ;
128168 } ) ;
@@ -200,6 +240,46 @@ describe('infra/logger', () => {
200240 it ( 'should not throw error on flush' , ( ) => {
201241 expect ( ( ) => logger . flush ( ) ) . not . toThrow ( ) ;
202242 } ) ;
243+
244+ describe ( 'with "LOG_LEVEL" set to "debug"' , ( ) => {
245+ beforeAll ( ( ) => {
246+ vi . stubEnv ( 'LOG_LEVEL' , 'debug' ) ;
247+ } ) ;
248+
249+ afterAll ( ( ) => {
250+ vi . stubEnv ( 'LOG_LEVEL' , '' ) ;
251+ } ) ;
252+
253+ it ( 'should log debug level' , async ( ) => {
254+ logger . debug ( 'logger.debug' ) ;
255+
256+ await vi . waitUntil ( ( ) => mocks . axiomIngest . mock . calls . length === 1 ) ;
257+ expect ( mocks . axiomIngest ) . toHaveBeenCalledWith (
258+ dataset ,
259+ expect . objectContaining ( { level : 'debug' , msg : 'logger.debug' } ) ,
260+ ) ;
261+ } ) ;
262+ } ) ;
263+ } ) ;
264+
265+ describe ( 'Test runtime defaults to silent' , ( ) => {
266+ beforeAll ( ( ) => {
267+ vi . stubEnv ( 'NODE_ENV' , 'test' ) ;
268+ vi . stubEnv ( 'VERCEL_ENV' , '' ) ;
269+ vi . stubEnv ( 'AXIOM_DATASET' , '' ) ;
270+ vi . stubEnv ( 'LOG_LEVEL' , '' ) ;
271+ } ) ;
272+
273+ afterAll ( ( ) => {
274+ vi . stubEnv ( 'AXIOM_DATASET' , dataset ) ;
275+ } ) ;
276+
277+ it ( 'should silent logger by default' , ( ) => {
278+ logger . warn ( 'logger.warn' ) ;
279+
280+ expect ( logger . isLevelEnabled ( 'warn' ) ) . toBe ( true ) ;
281+ expect ( consoleSpy . warn ) . not . toHaveBeenCalled ( ) ;
282+ } ) ;
203283 } ) ;
204284
205285 describe ( 'With pino options' , ( ) => {
0 commit comments