@@ -34,9 +34,9 @@ def self.create_logger(app_dir)
3434 FileUtils . mkdir_p diagnostics_directory
3535 log_file = File . join ( diagnostics_directory , JavaBuildpack ::Diagnostics ::LOG_FILE_NAME )
3636
37- if ( defined? @@logger ) && ( !@@logger . nil? )
37+ if ( defined? @@logger ) && !@@logger . nil?
3838 logger_recreated = true
39- @@logger . warn ( "Logger is being re-created by #{ caller [ 0 ] } " )
39+ get_logger . warn ( "Logger is being re-created by #{ caller [ 0 ] } " )
4040 else
4141 logger_recreated = false
4242 end
@@ -47,20 +47,25 @@ def self.create_logger(app_dir)
4747
4848 set_log_level
4949
50- @@logger . debug ( log_file )
50+ get_logger . debug ( log_file )
51+ get_logger . debug { "Logger creation stack: #{ caller . join ( "\n " ) } " }
5152 if logger_recreated
52- @@logger . warn ( "Logger was re-created by #{ caller [ 0 ] } " )
53+ get_logger . warn ( "Logger was re-created by #{ caller [ 0 ] } " )
5354 end
54- @@logger
55+ get_logger
5556 end
5657
5758 # Gets the current logger instance.
5859 #
59- # @return [Logger, nil] the current Logger instance or `nil` if there is no such instance
60+ # @return [Logger] the current Logger instance
61+ # @raise if there is no current logger instance
6062 def self . get_logger
61- @@monitor . synchronize do
62- @@logger
63+ logger = get_logger_internal
64+ unless logger
65+ STDERR . puts "Attempt to get nil logger from: #{ caller } "
66+ raise 'no logger'
6367 end
68+ logger
6469 end
6570
6671 private_class_method :new
@@ -85,25 +90,31 @@ def self.get_logger
8590
8691 @@monitor = Monitor . new
8792
93+ def self . get_logger_internal
94+ @@monitor . synchronize do
95+ ( defined? @@logger ) ? @@logger : nil # rubocop:disable ParenthesesAroundCondition
96+ end
97+ end
98+
8899 def self . set_log_level
89100 logging_configuration = get_configuration
90101 switched_log_level = $VERBOSE || $DEBUG ? DEBUG_SEVERITY_STRING : nil
91102 log_level = ( ENV [ LOG_LEVEL_ENVIRONMENT_VARIABLE ] || switched_log_level || logging_configuration [ DEFAULT_LOG_LEVEL_CONFIGURATION_KEY ] ) . upcase
92103
93- @@logger . sev_threshold = case
94- when log_level == DEBUG_SEVERITY_STRING then
95- ::Logger ::DEBUG
96- when log_level == INFO_SEVERITY_STRING then
97- ::Logger ::INFO
98- when log_level == WARN_SEVERITY_STRING then
99- ::Logger ::WARN
100- when log_level == ERROR_SEVERITY_STRING then
101- ::Logger ::ERROR
102- when log_level == FATAL_SEVERITY_STRING then
103- ::Logger ::FATAL
104- else
105- ::Logger ::DEBUG
106- end
104+ get_logger . sev_threshold = case
105+ when log_level == DEBUG_SEVERITY_STRING then
106+ ::Logger ::DEBUG
107+ when log_level == INFO_SEVERITY_STRING then
108+ ::Logger ::INFO
109+ when log_level == WARN_SEVERITY_STRING then
110+ ::Logger ::WARN
111+ when log_level == ERROR_SEVERITY_STRING then
112+ ::Logger ::ERROR
113+ when log_level == FATAL_SEVERITY_STRING then
114+ ::Logger ::FATAL
115+ else
116+ ::Logger ::DEBUG
117+ end
107118 end
108119
109120 def self . get_configuration
@@ -113,7 +124,10 @@ def self.get_configuration
113124
114125 def self . close
115126 @@monitor . synchronize do
116- @@logger = nil
127+ if ( defined? @@logger ) && @@logger
128+ @@logger . debug { "Logger close stack: #{ caller . join ( "\n " ) } " }
129+ @@logger = nil
130+ end
117131 end
118132 end
119133
0 commit comments