@@ -319,6 +319,92 @@ describe('BunyanInstrumentation', () => {
319319 assert . strictEqual ( rec . body , 'hi' ) ;
320320 assert . strictEqual ( rec . attributes . aProperty , 'bar' ) ;
321321 } ) ;
322+
323+ it ( 'log record error level' , ( ) => {
324+ instrumentation . setConfig ( { logSeverity : SeverityNumber . FATAL } ) ;
325+ // Setting `logSeverity` only has an impact on Loggers created
326+ // *after* it is set. So we cannot test with the `log` created in
327+ // `beforeEach()` above.
328+ log = Logger . createLogger ( { name : 'test-logger-name' , stream } ) ;
329+ log . error ( 'error log' ) ;
330+ log . fatal ( 'fatal log' ) ;
331+ const logRecords = memExporter . getFinishedLogRecords ( ) ;
332+ // Only one log record match configured severity
333+ assert . strictEqual ( logRecords . length , 1 ) ;
334+ assert . strictEqual ( logRecords [ 0 ] . body , 'fatal log' ) ;
335+ } ) ;
336+
337+ it ( 'log record error level' , ( ) => {
338+ instrumentation . setConfig ( { logSeverity : SeverityNumber . ERROR } ) ;
339+ // Setting `logSeverity` only has an impact on Loggers created
340+ // *after* it is set. So we cannot test with the `log` created in
341+ // `beforeEach()` above.
342+ log = Logger . createLogger ( { name : 'test-logger-name' , stream } ) ;
343+ log . warn ( 'warn log' ) ;
344+ log . error ( 'error log' ) ;
345+ const logRecords = memExporter . getFinishedLogRecords ( ) ;
346+ // Only one log record match configured severity
347+ assert . strictEqual ( logRecords . length , 1 ) ;
348+ assert . strictEqual ( logRecords [ 0 ] . body , 'error log' ) ;
349+ } ) ;
350+
351+ it ( 'log record warn level' , ( ) => {
352+ instrumentation . setConfig ( { logSeverity : SeverityNumber . WARN } ) ;
353+ // Setting `logSeverity` only has an impact on Loggers created
354+ // *after* it is set. So we cannot test with the `log` created in
355+ // `beforeEach()` above.
356+ log = Logger . createLogger ( { name : 'test-logger-name' , stream } ) ;
357+ log . info ( 'info log' ) ;
358+ log . warn ( 'warn log' ) ;
359+ const logRecords = memExporter . getFinishedLogRecords ( ) ;
360+ // Only one log record match configured severity
361+ assert . strictEqual ( logRecords . length , 1 ) ;
362+ assert . strictEqual ( logRecords [ 0 ] . body , 'warn log' ) ;
363+ } ) ;
364+
365+ it ( 'log record info level' , ( ) => {
366+ instrumentation . setConfig ( { logSeverity : SeverityNumber . INFO } ) ;
367+ // Setting `logSeverity` only has an impact on Loggers created
368+ // *after* it is set. So we cannot test with the `log` created in
369+ // `beforeEach()` above.
370+ log = Logger . createLogger ( { name : 'test-logger-name' , stream } ) ;
371+ log . debug ( 'debug log' ) ;
372+ log . info ( 'info log' ) ;
373+ const logRecords = memExporter . getFinishedLogRecords ( ) ;
374+ // Only one log record match configured severity
375+ assert . strictEqual ( logRecords . length , 1 ) ;
376+ assert . strictEqual ( logRecords [ 0 ] . body , 'info log' ) ;
377+ } ) ;
378+
379+ it ( 'log record debug level' , ( ) => {
380+ instrumentation . setConfig ( { logSeverity : SeverityNumber . DEBUG } ) ;
381+ log = Logger . createLogger ( { name : 'test-logger-name' , stream } ) ;
382+ log . info ( 'info log' ) ;
383+ log . debug ( 'debug log' ) ;
384+ // Just the log.info() writes to `stream`.
385+ sinon . assert . calledOnce ( writeSpy ) ;
386+ // Both log.info() and log.debug() should be written to the OTel Logs SDK.
387+ const logRecords = memExporter . getFinishedLogRecords ( ) ;
388+ assert . strictEqual ( logRecords . length , 2 ) ;
389+ assert . strictEqual ( logRecords [ 0 ] . body , 'info log' ) ;
390+ assert . strictEqual ( logRecords [ 1 ] . body , 'debug log' ) ;
391+ } ) ;
392+
393+ it ( 'log record trace level' , ( ) => {
394+ instrumentation . setConfig ( { logSeverity : SeverityNumber . TRACE } ) ;
395+ log = Logger . createLogger ( { name : 'test-logger-name' , stream } ) ;
396+ log . info ( 'info log' ) ;
397+ log . debug ( 'debug log' ) ;
398+ log . debug ( 'trace log' ) ;
399+ // Just the log.info() writes to `stream`.
400+ sinon . assert . calledOnce ( writeSpy ) ;
401+ // Both log.info() and log.debug() should be written to the OTel Logs SDK.
402+ const logRecords = memExporter . getFinishedLogRecords ( ) ;
403+ assert . strictEqual ( logRecords . length , 3 ) ;
404+ assert . strictEqual ( logRecords [ 0 ] . body , 'info log' ) ;
405+ assert . strictEqual ( logRecords [ 1 ] . body , 'debug log' ) ;
406+ assert . strictEqual ( logRecords [ 2 ] . body , 'trace log' ) ;
407+ } ) ;
322408 } ) ;
323409
324410 describe ( 'disabled instrumentation' , ( ) => {
0 commit comments