@@ -386,6 +386,85 @@ def test_different_log_level
386386 end
387387 end
388388
389+ sub_test_case "force_stacktrace_level" do
390+ data (
391+ none : [ nil , [ "trace" , "debug" , "info" , "warn" , "error" , "fatal" ] ] ,
392+ trace : [ Fluent ::Log ::LEVEL_TRACE , [ "trace" , "trace" , "trace" , "trace" , "trace" , "trace" ] ] ,
393+ debug : [ Fluent ::Log ::LEVEL_DEBUG , [ "debug" , "debug" , "debug" , "debug" , "debug" , "debug" ] ] ,
394+ info : [ Fluent ::Log ::LEVEL_INFO , [ "info" , "info" , "info" , "info" , "info" , "info" ] ] ,
395+ warn : [ Fluent ::Log ::LEVEL_WARN , [ "warn" , "warn" , "warn" , "warn" , "warn" , "warn" ] ] ,
396+ error : [ Fluent ::Log ::LEVEL_ERROR , [ "error" , "error" , "error" , "error" , "error" , "error" ] ] ,
397+ fatal : [ Fluent ::Log ::LEVEL_FATAL , [ "fatal" , "fatal" , "fatal" , "fatal" , "fatal" , "fatal" ] ] ,
398+ )
399+ test "level should be forced" do |( level , expected ) |
400+ backtrace = [ "backtrace" ]
401+ logger = Fluent ::Log . new (
402+ ServerEngine ::DaemonLogger . new (
403+ @log_device ,
404+ log_level : ServerEngine ::DaemonLogger ::TRACE ,
405+ )
406+ )
407+ logger . force_stacktrace_level ( level ) unless level . nil?
408+
409+ logger . trace_backtrace ( backtrace )
410+ logger . debug_backtrace ( backtrace )
411+ logger . info_backtrace ( backtrace )
412+ logger . warn_backtrace ( backtrace )
413+ logger . error_backtrace ( backtrace )
414+ logger . fatal_backtrace ( backtrace )
415+
416+ assert do
417+ expected == logger . out . logs . map { |log | log . match ( / \[ ([a-z]+)\] : backtrace$/ ) [ 1 ] }
418+ end
419+ end
420+
421+ test "stacktraces that do not meet log_level initially should be discarded" do
422+ logger = Fluent ::Log . new (
423+ ServerEngine ::DaemonLogger . new (
424+ @log_device ,
425+ log_level : ServerEngine ::DaemonLogger ::INFO ,
426+ )
427+ )
428+ logger . force_stacktrace_level ( Fluent ::Log ::LEVEL_INFO )
429+
430+ logger . trace_backtrace ( [ "trace" ] )
431+ logger . debug_backtrace ( [ "debug" ] )
432+ logger . info_backtrace ( [ "info" ] )
433+ logger . warn_backtrace ( [ "warn" ] )
434+ logger . error_backtrace ( [ "error" ] )
435+ logger . fatal_backtrace ( [ "fatal" ] )
436+
437+ assert_equal (
438+ [
439+ " #{ @timestamp_str } [info]: info\n " ,
440+ " #{ @timestamp_str } [info]: warn\n " ,
441+ " #{ @timestamp_str } [info]: error\n " ,
442+ " #{ @timestamp_str } [info]: fatal\n " ,
443+ ] ,
444+ logger . out . logs ,
445+ )
446+ end
447+
448+ test "stacktraces that do not meet log_level finally should be discarded" do
449+ logger = Fluent ::Log . new (
450+ ServerEngine ::DaemonLogger . new (
451+ @log_device ,
452+ log_level : ServerEngine ::DaemonLogger ::INFO ,
453+ )
454+ )
455+ logger . force_stacktrace_level ( Fluent ::Log ::LEVEL_DEBUG )
456+
457+ logger . trace_backtrace ( [ "trace" ] )
458+ logger . debug_backtrace ( [ "debug" ] )
459+ logger . info_backtrace ( [ "info" ] )
460+ logger . warn_backtrace ( [ "warn" ] )
461+ logger . error_backtrace ( [ "error" ] )
462+ logger . fatal_backtrace ( [ "fatal" ] )
463+
464+ assert_equal ( [ ] , logger . out . logs )
465+ end
466+ end
467+
389468 sub_test_case "ignore_repeated_log_interval" do
390469 def test_same_message
391470 message = "This is test"
0 commit comments